Robert Cemper · Oct 27, 2022 go to post

I'd say it's a bug in Query Generator.
A workaround in DB-API just might hide the real cause. 
If you are lucky the bug is fixed by the next release or the next after or some future release

Robert Cemper · Oct 27, 2022 go to post

thanks for confirming my diagnose
- that's why I used "+id as id1" to break the link to index global
- and :BTW:   ORDER BY 1  ; just using column position shows the same bug

Robert Cemper · Oct 26, 2022 go to post
set claim=##class(Claim).%OpenId(claimnum)  ; or similar
set line=##class(ClaimLine).%OpenId(linenum) ; or similar
do claim.ClaimLineRel.Insert(line)

now your query should work

Robert Cemper · Oct 25, 2022 go to post

Why would you want to do this?
the index related to %Save() is no "build" but just setting a value to the index global. 
setting an index is mostly less load than saving an object.

Robert Cemper · Oct 23, 2022 go to post

A possible workaround 

SAMPLES>set rs= ##class(%SQL.Statement).%ExecDirect(,"SELECT +id id1, x, y, z FROM some_table ORDER BY id")

SAMPLES>while rs.%Next() { zwrite$listbuild(rs.id1, rs.x, rs.y, rs.z) }
$lb(1,1,2,"z1")
$lb(2,2,3,"z2")
$lb(3,3,4,"z3")
$lb(4,4,5,"z4")

SAMPLES>

The point is to consume your value NOT from temp order global.

tested in 
Cache for Windows (x86-64) 2018.1.7 (Build 721U) Fri Mar 18 2022 22:07:35 EDT
Should also work in IRIS

Robert Cemper · Oct 15, 2022 go to post

and code quality will struggle with it and dislike it

because you use name in write, but you don't set it explicitly

but don't care much about:
it doesn't understand %-variables and global variable scopes
and $$$macros with code inside, and ... and ... and  

Robert Cemper · Oct 14, 2022 go to post

to get control over your situation you have 2 key methods:

  • $SYSTEM.License.MaxConnections() returns the maximum number of connections a user can make while consuming one license unit.
  • $SYSTEM.License.ConnectionCount() returns the number of connections currently associated with the given UserIdentifier. The range of return values is normally 0 through MAXCONNECTIONS. If the value exceeds MAXCONNECTIONS then more than the allowable number of concurrent connections were attempted for a given ID and the system has transitioned to a mode of one connection per license for this UserIdentifier.

So you have to check if your user has exhausted its available connections and block him.
It's anyhow quite interesting how these users are able to trigger so many connections.

Robert Cemper · Oct 14, 2022 go to post

This is intentional behavior.
If the routine you changed calls some subroutine it is kept "on the stack"
This is a requirement to have a save return and continuation after the call.

The new version only becomes active after you have left the previous one by QUIT or RETURN.
simpler: if it is gone from the return path. 

Robert Cemper · Oct 13, 2022 go to post

I share your suggestion!

When I started with Docker I was highly skeptical after many years with VMware starting before their first release.
It was a hard exercise and I took quite a while digging through docs and helps.
My main problem was that everything was so generic and not at all specific to IRIS (or Caché).

Meanwhile, it became so common to me that I stopped running reviews on packages without docker.
Docker allowed me to have a "clean desk" after testing.
In addition. I saw through this activity so many valid variations that
I doubt to decide how to start and where.
On the other hand, I see in OEX ~450 tested and working examples (a dozen PR still pending) 
Following these examples and trying to understand what will be achieved
could be good food for training designers. 
 

Robert Cemper · Oct 11, 2022 go to post

You may have only 1 command: in each build
the 2nd overwrites the first

  iris:
    image: intersystemsdc/iris-community:latest
    command: --check-caps false
    container_name: tls-ssl-iris
    networks:
      app_net:
        ipv4_address: 172.16.238.20
    volumes:
      - ./iris-config-files:/opt/config-files
      # Mount certificates files.
      - ./certificates/CA_Server.cer:/usr/irissys/mgr/CA_Server.cer
      - ./certificates/iris_server.cer:/usr/irissys/mgr/iris_server.cer
      - ./certificates/iris_server.key:/usr/irissys/mgr/iris_server.key
    hostname: iris
    # Load the IRIS configuration file ./iris-config-files/iris-config.json
    command: ["-a","sh /opt/config-files/configureIris.sh"] 

this worked as multi-line 

command: 
    - -a
    - sh /opt/config-files/configureIris.sh 
      - --check-caps false

BUT  
         command: ["-a","sh /opt/config-files/configureIris.sh","--check-caps false"]

works as well 
 

Robert Cemper · Oct 8, 2022 go to post

in my various examples I took these strategies:

  • try to run the Py code in PY shell in a REAL terminal or docker command line console
  • error messages directly from the shell are much more useful  
  • insert temporary print(...) statements at suspicious points
  • what I see by COS <THROW>  is often more obfuscation than a hint  

to my experience, your 'KeyError' indicates that you try to get a value
from a non-existing global or subscript. in COS it would be <UNDEF>

Robert Cemper · Oct 6, 2022 go to post

in my package GlobalToJSON-ePython-pure
I developed this workaround: 

#; simulate $data() for existence and contentdefDdata(gref):
	val = None
	_d = 11#; check for subscripts	
	o=gref.order([])
	if o == None:
		_d -= 10try:
		val=gref.get([])
	except KeyError:
		#; no value @ top node
		_d -= 1return [_d,val]		
Robert Cemper · Oct 4, 2022 go to post

NIce you share a picture of a PDP11  ! 
a few of my heroes:

---

I know also some handicapped developers.
BUT: I find it highly insensitive and inadequate to drop their names in this forum

Robert Cemper · Oct 4, 2022 go to post
  • mountain climbing
  • long distance walking
  • practicing foreign languages
  • studying astrophysics, cosmology, nucelar physics,  anthropology, geology
Robert Cemper · Oct 4, 2022 go to post

Any sport that requires mental concentration. eg. mountain climbing, 
And I mean REAL climbing, not just moving your body somehow across nature.  

Robert Cemper · Oct 4, 2022 go to post
  • first I check the logical qualification - e.g. playing chess
  • next check the skills in estimating results of simple mathematical calculations 
    or simple mechanical ckecks or puzzle strategies (without paper and pencil) 
  • next, I observe the operation of their mobile phone and ask for explanations
  • the very last might be t take a look into suggestions like yours

With 2 very successful sons in software, internet, and project engineering (49yrs. + 36yrs.)
I have a valid benchmark for my strategy.

Robert Cemper · Oct 4, 2022 go to post

A real software developer doesn't care about the hardware or operating system.
Specific hardware is a subject for gamers.

Robert Cemper · Sep 28, 2022 go to post

I enjoy to solve what was declared to be IMPOSSIBLE before.
I dislike it if it turns out that issue was just a fake and nobody cares about my creations. 

Robert Cemper · Sep 26, 2022 go to post

Not of importance but interesting observation anyhow.
$ZPI differs in the last 3 digits .
$ZPI is right according to Wiki 

write"3.141592653589793116  PY",!,$ZPI_"  IRIS",!
3.141592653589793116  PY
3.141592653589793238  IRIS
Robert Cemper · Sep 25, 2022 go to post
 --progress plain

This is essential information.
Without it the building log just runs though with no chance for a rollback
and iris.script allows a lot of temporary debugging info.