Robert Cemper · Aug 11, 2020 go to post

It's not clear to me what you try:

"..so customers can connect to IRIS remotely using JDBC and not ODBC...."

So they need the related Java-Libraries to connect.   see Establishing JDBC Connections

While the setting in your jpg. relate to the SQL-JDBC Gateway that allows access to other DBs over JDBC.
You have also a JAVA gateway to run java out of IRIS See Using the Java Gateway.

Robert Cemper · Aug 7, 2020 go to post

That's a general problem of a web interface like this.
You start a query but it isn't finished before your fall into a browser timeout.

An easy workaround:

Start a terminal session (terminals don't know about timeout)
and from prompt run SQl.Shell

or for a multi-line statement just start with an empty line and run with GO

It will wait forever until completed

Robert Cemper · Aug 5, 2020 go to post

I'm not aware that this is available at SQL / DDL level 

You can set the default collation for all globals in a database.

or specific for an individual global before using it. 

The available collations have to be added here

Robert Cemper · Aug 3, 2020 go to post

I see 4 critical points to check:

  • if customerID is autogenerated or calculated you can't  insert to it or update it
  • if customerName has some constraints like UNIQUE or fails some other formal checking
  • if the (existing) record is locked by some application running in parallel
  • if some access rights block you

     

Robert Cemper · Aug 3, 2020 go to post

As these buffers are a (hopefully large) pool that belongs to your whole installation.
They are only cleared if you restart Caché.
But you should probably take a look at your "disk drives" (whatever type they are).
Their performance might be worth to check
[in quotes as they might be virtual in some way]  

In addition, a  performance check with WRC might make sense.
They are top experts to the subject.

If you have a large buffer pool you might run a $QUERY() loop across the whole global
in the morning and hope it stays there long enough. Some installations practice it that way.

Robert Cemper · Aug 3, 2020 go to post

Almost right!
not $order but the related global blocks are cached in global buffers.
large global buffers improve performance but they have to be loaded first.
and disk access is the slowest part in your machine (except network)

so at 1st access, you load the buffers and that might be slow.
any further access uses the loaded buffers

Robert Cemper · Aug 2, 2020 go to post

Thank you @Dan Pasco !
This confirms that it is not just a crazy idea ( as some of my former colleagues classified it).
I met this during testing about a decade ago to manage test data and to compare the impact of code changes. 
And - based on my history - the global was and is the ultimate truth for me of what is done on objects.
Robert

Robert Cemper · Aug 1, 2020 go to post

Thanks for your clarification.  I have now 1 rcc.PKG and several rcc.anything.PKG

Robert Cemper · Aug 1, 2020 go to post

  @Evgeny Shvarov 
     Are you looking for something like this ?

this is the related query:

select %vid AbsRef
    , TO_CHAR(Day,'YYYY-MM-DD')  Day
    , Seq 
    , $PIECE($PIECE(p,'$ZE=',2),'>',1)||'>' Type
    , $PIECE($PIECE(p,'>',2),',$ZV',1)||'>' Line
    , $PIECE(p,'$ZV=',2)||'>' Version
 from (
    SELECT TOP ALL
       day, seq, LIST(item||'='||value) p
       FROM zrcc.ERRORStack 
       WHERE Stacklevel=0
       AND item IN ('$ZE','$ZV')
       GROUP BY day,seq
)
Robert Cemper · Aug 1, 2020 go to post

out of the experience: every project in ZPM needs its personal package.

otherwise, you may see this:

ERROR #5001: Resource 'rcc.PKG' is already defined as part of module 'echoserver-wsock-iris'; cannot also be listed in module 'iris-internal-websocket-client'
ERROR #6315: FErrors reporting importing XML subelement in file  'C:\InterSystems\IRIS\mgr\.modules\USER\iris-internal-websocket-client\1.0.0\module.xml', at line'3', offset '55'. skipping this item.

Robert Cemper · Aug 1, 2020 go to post

@Evgeny Shvarov 
%ETN typically stops your job.  set $ZT="^%ETN"
If you use LOG^%ETN it writes to ^ERRORS and continues the job.
this is highly comfortable to be used in try {....} catch error { do LOG^%ETN }
more details to be found in ^%ETN.int (easy to read)

Robert Cemper · Jul 30, 2020 go to post

Thanks for the hint. 
I was pretty sure there should be something similar to serve SysMgmtPortal. I just didn't know.
Obviously the authors had the same problems as me with the old structure and applied a bunch of custom queries.
I don't think I missed something:
- the class is deployed so you have to accept what it does.
differently  %ERN.int doesn't hide anything and speaks full truth. 
- next to use it you require full access rights to %SYS and a namespace change %SYS to run it.
- and finally the topmost requirement: The queries are invisible to SQL! 
Just because not being exposed as SqlProcedure.

My solution runs in any namespace on Caché / Ensemble / iris .
Without any privileges and doesn't touch any ISC copyrights!

Robert Cemper · Jul 29, 2020 go to post

in IRIS if the data type is any numeric (%Integer, %Decimal, %Float, ..... or %Boolean)  the value is NOT enclosed in  Quotes.

Robert Cemper · Jul 29, 2020 go to post

Just to outline my understanding:
my package will be rcc.subject.classname   
rarely eventually zrcc.subject.classname  if it should go to %SYS .

And I will not touch/ rename existing projects as this means changing not just the code
but also README.md , Descriptions in OEX and Articles in DC, Screenshots, Dependencies (not just my own), ...
Over all a good source for mistakes, typos, errrors, confusion, 

Robert Cemper · Jul 28, 2020 go to post

What is the rule for VERSION  in Dependencies ?
Is it an EQUAL or a MINIMUM Version.   

e.g. <Version>0.0.0</Version>  would mean any version 

<Dependencies>
        <ModuleReference>
          <Name>holefoods</Name>
          <Version>0.1.0</Version>
        </ModuleReference>
      </Dependencies>

Thanks ! 

Robert Cemper · Jul 28, 2020 go to post

The so-called SQLformat doesn't exist in Caché (at least not in the last 20 years)
But over the gateway, you can move data from Caché to PostgeSQL.  "from a table on CACHE  to a POSTGRESQL table"

So you need a trigger to do it:
- Caché has to be the active part here
you can start the upload over a webservice, an REST call, even as an SQLprocedure, or automatically by the scheduler
And if you don't want to touch your target table directly you may have a shadow-copy in PostgreSQL that
then serves as a source for your final updates.  ( some INSERT...SELECT....)

So instead of import from CSV, you do an import from a local table in PostgreSQL
Anything is better than CSV.
This would even allow filling your shadow over the day in small steps instead of a big bang (if needed)