Have you tried refreshing the catalog?  If that doesn't work I suppose it could be a permissions issue.  If you want to pick up an ODBC log I'd be happy to review it.

Have you tried refreshing the catalog?  If that doesn't work I suppose it could be a permissions issue.  If you want to pick up an ODBC log I'd be happy to review it.

I think any answer here should be thinking about using triggers.  I don't know MySQL enough to know if it has linked tables, but if it were Caché as the master copy, this is pretty easy.  You have your Master table which contains your data, and an external table that has a copy.  You link the external table to Caché and put in triggers in the master table to call INSERT/UPDATE/DELETE on the mapped table.  

Hey thanks for posting this!  

And no matter what you say, I WAS NOT laughing at you (though I may have been laughing)!  cheeky

This was my thought.  If you use CacheSQL Storage not only do you pick up the JSON functionality you want, you also get SQL and Objects access, allowing you to take full advantage of the power of Caché.

Fastest way?  Probably to do a side-by-side install and just do a swap of the .DAT files.  

Find in files is a nice Studio feature, but I would say that the Atelier paradigm allows for a much more powerful search by using grep.  All the files that are in your workspace will exist on your hard drive in  your workspace directory in UDL (that is, plaintext format).  So if you wanted to find in files for, say, ^KMB, you can do this:

kbaxterMAC:User kbaxter$ grep -iR "KMB" ./

.//TwoGWQueries.mac: s ^KMB = 1

Remember, the whole point of Atelier is to move the source of truth from the Database to your Source Control, which will in some cases be linked into your filesystem.  I think grep is a great solution here.

2 things:

           1) What are you using for a Select Mode (Display, Logical, or OBDC)?  

           2) If you want to use a MySQL Stored Procedure, you can link it with the Linked Procedure Wizard.

Two examples below, one with a name and one without.  It looks like this is supposed to work like a Stored Procedure (according to my understanding of the Postgresql docs).  Having a property that uses the function as its sqlcomputecode is pretty trivial.


Class Test.Seq {

Classmethod KyleSeq() as %Integer [sqlproc, sqlname="KyleSeq", codemode=expression]

{

$I(^KMB("KyleSeq"))

}

Classmethod KyleSeqName(name as %String) as %Integer [sqlproc, sqlname="KyleSeqName",codemode=expression]

{

$I(^KMB($G(name,"KyleSeq")))

}

}

SAMPLES>>select Test.KyleSeqName('Fabio')

8. select Test.KyleSeqName('Fabio')

Expression_1

3



SAMPLES>>select Test.KyleSeq()           

9. select Test.KyleSeq()


Expression_1

5