go to post Robert Cemper · Feb 6, 2023 This is just cool!I tried it with my Stream example using xDBC and no fake mimic.
go to post Robert Cemper · Feb 4, 2023 Before IRIS there was a trial version. But always only the latest.There was also no community. as we know it today.What you look for is more than 10 years back !
go to post Robert Cemper · Jan 27, 2023 this might do it: Class User.Scott { ClassMethod Clean(infile, outfile) As %Status { set in=##class(%Stream.FileCharacter).%New() do in.LinkToFile(infile) set out=##class(%Stream.FileCharacter).%New() set out.Filename=outfile do in.Rewind() while 'in.AtEnd { set line=in.ReadLine() set last=($e(line,*)="|") if last set sc=out.WriteLine(line) else set sc=out.Write(line) } do in.%Close() set sc=out.%Save() quit sc } }
go to post Robert Cemper · Jan 27, 2023 Just to understand your requirements correctly.- a linebreak $c(13,10) would only be acceptable if it follows a segment terminator "|" - IF YES Is this just a pipe | or a double pipe || as in your example?This could be a processing rule to check the last chars of the lineand ignoré the linebreak at a mismatch.
go to post Robert Cemper · Jan 23, 2023 In IRIS you have in SMP the option to run your Query in background and bypass the timeout.
go to post Robert Cemper · Jan 23, 2023 it still exists: ClassMethod Build(f As %Integer) { s a="#" f i=F:-1:1 w ?i,a,! s a=a_"##" }
go to post Robert Cemper · Jan 23, 2023 Just forget my contribution.I'm not interested in digging for secrets!I leave that to Indiana Jones my code is deleted ! it's not my type of fun
go to post Robert Cemper · Jan 23, 2023 Hmm!Where did you see the enclosing quotes? they are invisible in my browser.
go to post Robert Cemper · Jan 22, 2023 FOUND SOMETHING ! in SMP IRIS you see this header as in Caché / Ensemble but click to more has a surprise in IRIS Select foreground and you get all %session, .... that you look for.Recorded with SPOOL , device 2 %CSPsc=1%ROWCOUNT=0%ROWID=""%SNGetQueryStats=1%SYSLOG=1%application=<OBJECT REFERENCE>[356@%CSP.UI.Portal.Application]%caller=""%class="%CSP.UI.Portal.SQL.Home"%method="InvokeInstanceMethod"%msg=""%obj=<OBJECT REFERENCE>[362@%ZEN.Component.html]%objlasterror=""%page=<OBJECT REFERENCE>[20@%CSP.UI.Portal.SQL.Home]%request=<OBJECT REFERENCE>[1@%CSP.Request]%response=<OBJECT REFERENCE>[2@%CSP.Response]%sc=1%session=<OBJECT REFERENCE>[3@%CSP.Session]%sqlcontext=<OBJECT REFERENCE>[433@%Library.ProcedureContext]%tStatement=<OBJECT REFERENCE>[369@%SQL.Statement]%zenContext="method"%zenThreadId=39SQLCODE=0rs=""<Private variables>$zp=14828$io="|TCP|58771"Reverse engineering of the SMP page uncovered this new checkbox to me.Could be it is documented somewhereHTH
go to post Robert Cemper · Jan 22, 2023 I could imagine 2 variants: creating a "clone" of the CSP based "synchronous" Queries we know from C/E to have the unique session just using xDBC based tools such as Squirrel, DBeaver, WinSQL, ..... which is probably better since SMP mimics ODBC mode, but doesn't use real xDBC connection external xDBC provides a 1:1 connection as a terminal session would do.
go to post Robert Cemper · Jan 22, 2023 You are CORRECT , In Caché/Ensemble SMP uses straightforward CSP and you have %session object and %request ...I verified IRIS 2022.2 and 2022.3:- SMP runs Queries differently and neither %session nor %request is visibleby variable » %inBackground = 1 it indicates working in backgroundand once completed the Job is gone, but SMP is still around
go to post Robert Cemper · Jan 22, 2023 As a first step I would try to find out if your Trigger is running in the same process as your CSPjust writing $JOB with a $H into a test global. eg.: set ^stefan($h,$j)="CSP" for CSP set ^stefan($h,$j)="TRIGGER" for the trigger code ;;; or use do LOG^%ETN() ; write to ^ERRORS
go to post Robert Cemper · Jan 21, 2023 As @Enrico Parisi pointed out: IRIS.DAT is an independent structureThe link between file and Namespace is in the ConfigFile (??.CPF) in your install directory.The file could be located anywhere.
go to post Robert Cemper · Jan 21, 2023 MS Acess typically uses ODBC data sources.By default, the ODBC35 driver for Cache/IRIS is installed at Cache/IRIS installation time.You have to configure it (directly or from MS Access) with Namespace + SuperServer PortTake care not to mix 32bit mode with 64bit mode depending on your Cache installation
go to post Robert Cemper · Jan 20, 2023 I use the suggested common method for length calculation /// write ##class(Golf.Task2).length() ClassMethod length( class = {$classname()}, method = "Build") As %Integer { #dim methodObj As %Dictionary.MethodDefinition set methodObj = ##class(%Dictionary.MethodDefinition).IDKEYOpen(class, method) quit methodObj.Implementation.Size } also in terminal:USER>p s (b,h)="*" f L=f:-1:1 w ?L,b,! s b=b_h_h F i=1:1:f K s,c S ($P(s," ",f-i+1),$P(c,"#",i*2))="" W s,c,!
go to post Robert Cemper · Jan 19, 2023 You are on the right path, I use deuw and see some differences grown by history sort ÄÖÜ + ß (sharp S) after Z as by ASCII sort Ä after A, Ö after O, Ü after U but before Z ignore trema. sort Ä=A, Ö=O, Ü=U no idea about ß 4 and 5 may contribute to the lastest nonsense of German Language Authorotiesthat introduced sharp_S also in uppercase.<we lived since ever without it and didn't miss anything> Your case:You can't change the collation of an existing GlobalBut you can apply a different collation before first use in SMPto overwrite default collation of the DBSystem > Configuration > Local Databases > Globals > New Global So you set up a global ^TEMP3 with collation German3and run MERGE ^TEMP3=^TEMP and have a new collation.Some time back I set that to have different index collations forGerman, Hungarian, Italian, French, Slovenian, ...see my post Multi Language Sort