Robert Cemper · Jul 8, 2021 go to post

my 1st attempt:

N(t) s a="Alfa,Bravo,Charlie,Delta,Echo,Foxtrot,Golf,Hotel,India,Juliett,Kilo,Lima,Mike,November,Oscar,Papa,Quebec,Romeo,Sierra,Tango,Uniform,Victor,Whiskey,Xray,Yankee,Zulu"
 f i=1:1:$l(t) s %=$E($zcvt(t,"U"),i) w $s(%?1A:$p(a,",",$a(%)#32)_" ",%=" ":"",1:%)

Line1=174  Line2=84  Total=258

Robert Cemper · Jul 4, 2021 go to post

I come from Vienna, Austria.
I guess we are "neighbors" according to your mail  (.si)
 

Robert Cemper · Jul 4, 2021 go to post

Zdravo Matjaž!
you are right in principle. Though there are hundreds of similar cases since DECADES!
ok, the cleaner solution brings us back to my previous proposal.
add a calculated property to your serial class ##class(Packing.Needs.Attributes) like this

Property List As %List [ CalculatedSqlComputed,
   SqlComputeCode 
= { set {*}= $LB({attr1},{attr2},{attr3},{attr4} ) }, SqlComputed ];

attr1,attr2,attr3,attr4 have to be the SQLnames of these properties !!!

WARNING#1: you have to maintain this list manually at every change of the attributes!

WARNING#2:: this calculation happens at every access to the object. 
The additional parameter     SqlComputeOnChange = (attr1,attr2,attr3,attr4
may reduce this. though I've never tried in practice

Robert Cemper · Jul 4, 2021 go to post

Ok. the picture becomes clearer: 
%SerialObject is stored as $LB($LB(....),...)
you can get your result by 2 steps. 

do attribute.%SerializeObject(.serialraw)
set list=$list(serialraw)
Robert Cemper · Jul 3, 2021 go to post

don't think so complicated. leave your serial object as it is
but use instead a CALCULATED, SQLCOMPUTED Property as $LB()  and you can then index it

Robert Cemper · Jul 3, 2021 go to post

IRIS includes a bunch of "legacy" routines".
Typically %R*, %G* that you can load by "legacy" commands in a "legacy" session or terminal
(not webterminal or simliar commandline simulatiors)
They are hidden in some way, It is not specific to VSC but the same with Studio.
Though ZL %RI ZS %zRI should create a routine that you can work on. Z*,z*%Z*,%z* is writable Use code

Robert Cemper · Jul 2, 2021 go to post

my PullRequest is pending.
IMAGE=intersystemsdc/iris-community:2019.4.0.383.0-zpm
is broken as it starts with SHELL ["/irissession.sh"]
instead of SHELL ["/bin/bash", "-c"]

Newer imags don't have that problem
 

Robert Cemper · Jun 26, 2021 go to post

20/30 tables and 300 columns is quite a heavy query / view.
VIEW is only a stored SELECT. The same considerations apply. 
#1)
you should have an index for each column that appears in a JOIN ON..   on WHERE...
and that's hopefully just 1 index by table
#2) for each table the required columns should go as Data into the index
You are perfect if the query analyzer only shows access to indices.

My proposal only covered views of a single table with indices

Materializing a multi-table view as you describe it would require a hidden table with all JOINs
and no filtering WHERE clause. And you would require extra code to keep it up to date.
This is a job that the query generator does in an excellent way and with all tricks available.
I wouldn't say it's impossible. And the final query is definitely faster. 
But it may take weeks or months to get it running. Not to talk about maintenance.
Analytics/DeepSee acts in a similar way. And I can prove: it wasn't done in an afternoon session.
 

Robert Cemper · Jun 19, 2021 go to post

Thanks for raising the issue.
I experience the same behavior with a fresh Docker Image

Robert Cemper · Jun 17, 2021 go to post

The SQL statement should look slightly different

Insert Into TableX (Name, Address, Phone)
SELECT 'Name1', 'Address1', 'Phone1'
UNION
SELECT 'Name2', 'Address2', 'Phone2'
UNION
SELECT 'Name3', 'Address3', 'Phone3'
Robert Cemper · Jun 17, 2021 go to post

the base class for all Webpages (also REST) from IRIS is %CSP.Page.cls
When a csp request is received, the CSP Server creates an instance of the %CSP.Request class. This is accessible via the %request variable. It holds all information about the call.
Also all CGI variables.  HTTP_REFERER might be what you look for
and that's all core HTTP

Robert Cemper · Jun 15, 2021 go to post

maybe a misunderstanding.

if you execute a HTTP request YOU are the visitor at that side and get a response.
do you look for your own IP address? 

Robert Cemper · Jun 15, 2021 go to post

Hi Nigel,

I experienced this missing UNINSTALL feature several times filling up my working environment.
So I adopted this  strategy:
- if there is no Docker container in the project I instal one of the prepared templates
- As packages are (or should) independent of the platform I enter the container and install it there
simply running docker-compose exec -u root iris bash and  execute the installation
and when finished just removing containers and images and I'm back to roots.
It only fails if I run against the 5 connections limit of the community license. But that's untypical.

Robert Cemper · Jun 9, 2021 go to post

OK: %ALL means really all.- no surprise
in your list, I miss role %SQL which gives access to all INFORMATION_SCHEMA.*
as @Vic Sun just pointed out
 

Robert Cemper · Jun 8, 2021 go to post

no qspec required.

USER>set file="box.xml"
USER>set sc=$system.OBJ.Export("box.GBL",.file)
 
Exportieren in XML gestartet am 06/08/2021 11:46:58
Exportiere Global: ^box
Export erfolgreich abgeschlossen.
 
USER>$type box.XML
 
<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25" zv="IRIS for Windows (x86-64) 2021.1 (Build 209U)" ts="2021-06-08 11:46:58">
<Global>
<Node><Sub>^box</Sub>
<Node><Sub>1</Sub>
<Node><Sub>1</Sub>
<Data> </Data>
<Node><Sub>0</Sub>
<DataBase64>G1syOzRI
</DataBase64>
</Node>
<Node><Sub>1</Sub>
<Data>1</Data>
</Node>
<Node><Sub>2</Sub>
<Data>...456..9</Data>
</Node>
</Node>
<Node><Sub>2</Sub>
<Data> </Data>
<Node><Sub>0</Sub>
<DataBase64>G1syOzEwSA==
</DataBase64>
- - - -   removed ------- 
</Node>
</Node>
<Data> </Data>
USER>
Robert Cemper · May 25, 2021 go to post

Ok. this is not MS-SQL.
Connect with your Studio to the correct Namespace and print out the related ClassMethod. 
This would most likely be some code in ObjectScript and not look like SQL

Robert Cemper · May 24, 2021 go to post

ownership is typically irisowner:irisuser.
Apply chown to the iris directories & files

Robert Cemper · May 22, 2021 go to post

instead of simple ls run ls -l  to see who is the owner.
most likely it's the user that installed iris.
to fix it run sudo chmod . . . 

Robert Cemper · May 21, 2021 go to post

I did this more than a year ago. It was quite some effort but it worked nicely.
But I was blocked by ISC and got under pressure not to publish it for copy-right reasons.
So be careful not to have this same conflict. Pls. don't ask for details!

Robert Cemper · May 20, 2021 go to post

OK! Thanks for resolving the miracle! 
And we just learned IRIS does JSON . . .  more or less . . . some times  . . . somehow . . . fuzzy
A real enlightenment that I was not aware of !