Alexander Koblov · Jan 19, 2017 go to post

Natasha,

we need much more details.

What exactly did you tried? How do you import data? What's the source of the data? What do you mean by "nothing works"?

What version of Caché do you have (exact $zv)? What locale this instance have?

I have no problems importing this data from UTF-8 file.

USER>set f = ##class(%Stream.FileCharacter).%New()

USER>write f.LinkToFile("c:\temp\demo.txt")
1
USER>set line = f.Read()
 
USER>write line
ščž
Alexander Koblov · Jan 23, 2017 go to post

Hi Token.

Yes, you need to specify expected namespace for tag CardData. Do you know what it should be?

How do you generate this XML? Please provide small code sample. Do you have XML schema definition for CardData? If yes, please provide it.

Alexander Koblov · Jan 31, 2017 go to post

First of all, this is bad sample of GROUP BY query, in my opinion:

SELECT c1, c2 FROM table2 GROUP BY c1

You are grouping by c1, but also selecting c2. GROUP BY collects all rows with the same c1 into one row. Each group of row with the same c1 might have different values of c2. What particular value of c2 you want to get?

Generally, if you query contains GROUP BY, SELECT should contain either expressions from GROUP BY, or aggregate functions. For example, following query is OK:

SELECT c1, max(c2) FROM table2 GROUP BY c1

Having said all that, you might try to concatenate column1 and columnn2

SELECT column1, column2, column 3
FROM  table
WHERE
    column1 || '===' || columnn2 IN (SELECT c1 || '===' || c2 FROM table2 GROUP BY c1)
ORDER BY column1

provided that values in these columns do not contain '==='

Another possibility is:

SELECT column1, column2, column 3
FROM  table T1
WHERE EXISTS (SELECT 1 FROM table2 T2
               WHERE T2.c1 = T1.column1
                 AND T2.c2 = T1.column2)
ORDER BY column1

I think GROUP BY is not necessary in second case.

Alexander Koblov · Mar 10, 2017 go to post

At least please notice that Caché ObjectScript does not have operator precedence.

Instead of

if (c >= 128 && c <= 255) {

you should write

if (c >= 128) && (c <= 255) {

the same with

s:(c >= 128 && c <= 255) retval=$lg(map,(c-128))
Alexander Koblov · Mar 15, 2017 go to post

I think you can construct pKey as $ListBuild of different values and parse them back in LoadForm.

I don't think it's possible to add other parameters to LoadForm callback

Alexander Koblov · Jun 1, 2017 go to post

Hi P.

Check for $d(^Vehicle(unitNumber)) in your sample is not right -- process in transaction can always read data that it has changed.

Starting transaction in READ COMMITTED mode means that this transaction cannot read data modified by other transactions but not commited yet (provided other transaction properly locks the data). It does not restricted other processes from reading data changed by this transaction, unless

a) Other process also starts transaction in READ COMMITED mode OR b) Other process acquires the lock for the global node that is modified by current process.

So, if legacy Caché ObjectScript code does not use locks you cannot prevent it from reading your uncommited data.

If legacy Caché ObjectScript uses locks then you need acquire these locks before inserting the rows into Vehicle.* tables.

Transaction isolation in Caché is implemented using locks. When you modify data using SQL or Object-access Caché acquire locks for you, unless you explicitely say not to do this.

Please see following documentation for more information on locking and concurrency in globals, Objects and SQL "Locking and Concurrency control" http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=ALOCK "Modifying the Database" http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GSQL_modify

Hope this explains things a little more, Alexander.

Alexander Koblov · Jun 7, 2017 go to post

']]' means 'Sorts After'. Indeed, as we can see A sorts after B.

USER>kill
 
USER>set A="1.0"
 
USER>set B="2.2"
 
USER>write A]]B
1
USER>set c(A) = 1, c(B) = 1
 
USER>zwrite c
c(2.2)=1
c("1.0")=1
Alexander Koblov · Jun 20, 2017 go to post

Hi Jeffrey.

Please check web-application settings (Management portal -> System Administration -> Security -> Applications -> Web Applications) and ensure that application '/api/atelier' is Enabled -- it has "Application" checkbox checked in Enabled section.

Hope this might help, Alexander.

Alexander Koblov · Jul 4, 2017 go to post

Hi Jochen.

If you have different modules in one namespace I suggest to you to have different Atelier projects for these modules. Then you can have one Git repository to handle all these projects.

With such approach the repository has all the code for the namespace and the code is grouped by projects (modules) inside repository.

Here you can find more details on how you can define Git repository for multiple projects. https://wiki.eclipse.org/EGit/User_Guide#Creating_a_Git_Repository_for_multiple_Projects

Regards, Alexander.

Alexander Koblov · Jul 19, 2017 go to post

No. You need to wrap it as you showed in second example.

You can use "C" alias from first sample only in "ORDER BY" clause in the same query, not in WHERE.

Alexander Koblov · Aug 10, 2017 go to post

Can you connect to that server using openssl?

If yes, try to match protocol openssl uses with the protocols enabled in SSL/TLS Configuration.

E.g. if SSL/TLS Configuration have only TLS1 enabled, try to connect with openssl using -tls1

openssl s_client -tls1 -connect server:port

Maybe that server requires tls1.2 or SNI that is not available in Caché 2013.1

Alexander Koblov · Oct 10, 2017 go to post

Documentation says following:

For a table containing more than 1 million records, a bitmap index is less efficient than a standard index when the number of unique values exceeds 10,000. Therefore, for a large table it is recommended that you avoid using a bitmap index for any field that is contains (or is likely to contain) more than 10,000 unique values; for a table of any size, avoid using a bitmap index for any field that is likely to contain more than 20,000 unique values. These are general approximations, not exact numbers.