Robert Cemper · Aug 10, 2017 go to post

You are welcome.
When I loaded the class first I was surprised too just to see 4 methods.

Robert Cemper · Aug 10, 2017 go to post

Mike,

You are formally correct but data type %List just has no method LogicalToDisplay !
but:

- LogicalToOdbc
- LogicalToXSD
and reverse

it seems the implementer expected us to use $ListToString(...) and $ListFromString()
so far for consistency in object model support  sad

Robert Cemper · Aug 10, 2017 go to post

Alexey,
- The final size  after some design optimizations was
175 GB DataGlobals  + 216 GB IndexGlobals   ;  separated for backup considerations  (on 1 single drive sad )

- data analysis was all done with SQL + a bunch of "homemade" SQL Procedures / ClassMethods running specific subqueries.
 

Robert Cemper · Aug 9, 2017 go to post

Documentation is the art to express facts in a way the non insiders could understand.
Engineers are quite often "unverbose" and "limited in verbal communication skills". 
In any language exept programing languages smiley
BTW. your book made things clear to me that I assumed to know for many years.

BTW. I appreciate if you accept my answer wink

Robert Cemper · Aug 9, 2017 go to post

I'd try to have just 1 query with 3 parameters and switch them on/off as you need

SELECT ID FROM Table WHERE (Field1 %STARTSWITH :par1 
AND ((0=:sw2) OR (
Field2 = :par2)) 
AND ((0=:sw3) OR (
Field3 = :par3))

Now using only par1  means (par1=whatever, sw2=0,sw3=0, par2="",par3="") so the 2nd + 3rd condition is switched off and par2,par3 ignored

2nd case: (par1=whatever,  par2=something, sw2=1,sw3=1, par3="") so only 3rd condition is switched off  par 3 ignored

3rd case: (par1=whatever,  par2=something, par3=other, sw2=1,sw3=1) all conditions active

you see this could be extended easily

Robert Cemper · Aug 9, 2017 go to post

%Library.Char uses MAXLEN as size:
it's applied in LogicalToOdbc and LogicalToDisplay appending Blank until MAXLEN is reached

anyting else is inherited from %String

Robert Cemper · Aug 9, 2017 go to post

before launching your request in your check your %Net.HttpRequest object
property Https is obviously set.

property SSLConfiguration has to be

The name of the activated TLS/SSL configuration to use for https requests.

if the request fails in execution
property SSLError tells you what went wrong

If request uses an SSL connection and a SSL handshake error has occurred, then SSLError contains text describing the SSL error.

more on  %Net.HttpRequest here
http://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?…

Robert Cemper · Aug 9, 2017 go to post

It's not yet time for GBLOCKCOPY.
In namespace %SYS you should find a routine ^GCOMPACT
(at least according to docs http://docs.intersystems.com/documentation/cache/cache5docs/PDFS/GMSM.p…)

Based on the results of %GSIZE you now compact those globals with most blocks and lowest packing.
This generates free blocks that will be eliminated during GBLOCKCOPY.

Routine ^%FREECNT might help you to follow up your efforts
Purpose: Displays the total amount of disk space within a volume group and the amount of free space.

HTH

Robert Cemper · Aug 8, 2017 go to post

So we are back to Documentation vs. Reality.
And another excellent example for the importance of this community. 

Robert Cemper · Aug 8, 2017 go to post

you are right on %objlasterror.  and that's how I work it around
but if you want to keep a log and chase sporadic error events this is quite an extra effort.  

Robert Cemper · Aug 8, 2017 go to post

definitely a good idea to run routine ^%GSIZE  to find the big consumers and packing
directory: c:\intersystems\cache\mgr\user\
Page: 1                           GLOBAL SIZE                        08 Aug 2017
                                                                        10:28 AM
      Global        Blocks       Bytes Used  Packing   Contig.
      --------    --------  ---------------  -------   -------
      CacheStd           1              140      2 %         0
      CacheStdS          1               92      1 %         0
      CacheStream      109          764.376     86 %        70
      ERRORS             1               12      0 %         0
      G1                 1               72      1 %         0

Robert Cemper · Aug 7, 2017 go to post

Wow. 5.0 is roughly 12..15 yrs. back.


Could be ^GBLOCKCOPY existed then already in NS %SYS.  
It should be able to cover your needs and create a new smaller CACHE.DAT in a new directory.
 

Robert Cemper · Aug 7, 2017 go to post

My personal preference is %Status: 1 = OK,
0 = something went wrong + standard or handmade Error Code
+ ability of $system.Status.Append(Status) to get a chain of error messages
which gives you the chance to drill down to the source. Which is especially important when
you get it from some embedded action.

The opposite to me is
<ZSOAP>  that leave you alone with no hint what went wrong
or the famous <ZSG> homed in %Save() Method

to pass return value I prefer objects or variables passed byRef od Output
 
The other opposite is SQLCODE (would be better named SQLerror)  0 is OK. Anything else needs action
But that's tradition in SQL world since more than half a century

Robert Cemper · Aug 7, 2017 go to post

all Studio settings are stored in Windows registry.
Search with regedit for InterSystem

Robert Cemper · Aug 6, 2017 go to post

If this user should also be programmer you can create a new role copying from %Developer
and then remove the DB's that you want him to lock out like this  just for NS = USER


.

Robert Cemper · Aug 6, 2017 go to post

Thanks for the pointer!
Good to see that someone got the time to productize the idea of Custom Index Type
With this development the win could have been even more dramatic.
My benchmark was done in  March2011,  so Caché version must have been 2010 .  
2013.1 was my last version @ISC  just rolling out.
At that time bitmaps helped only with rather relaxed precision.

Robert Cemper · Aug 3, 2017 go to post

For an engineer this sounds like a quite challenging exercise to rewrite a PGP lib in COS.
 

But it seems more promising to wrap the existing (and hopefully well tested) code and consume it from Caché using one of the existing Gateways:

- Callout Gateway http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY…

- ActiveX Gateway  http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY…

- or just  connect
over TCP/IP http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY…
or UDP http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY…
or a Pipe  http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY…
I bet the community has even more ideas to reuse the existing code

Robert Cemper · Aug 3, 2017 go to post

indeed this is surprising.

but is this really:   do content.ReadLine(,,isEOL)

it should be a pass by reference to receive something back do content.ReadLine(,,.isEOL) 
with the <dot> in front of the variable 

Robert Cemper · Aug 2, 2017 go to post

You still have the option to create your own %ZLANGC00.int 
and make you own ZZEXIT to avoid the risky HALT
It's a miracle to me how HALT could survive from PDP-7 sn#103 at MGH and nobody touched it.