User Answers

SQL Performance is a very big topic. So many ways how to achieve what you need. Just indexes not enough, you need right indexes and right queries. I think it will be much more productive if you provide some examples of your classes with populate, and queries. So, anybody will be able to reproduce your issue and offer some ways how to solve it.


USER> Set str = "abcd(123)/,op(56)*&^%$987ABC"
USER> Write ##class(%Regex.Matcher).%New("[^\w\d()]", str).ReplaceAll(" ")
abcd(123)  op(56)     987ABC

USER> Write ##class(%Regex.Matcher).%New("[^\w\d()]+", str).ReplaceAll(" ")
abcd(123) op(56) 987ABC

When you have || in Id, it usually means, that you have additional Index by two or more fields, and marked as IdKey. Something like this.

Property RollNo As %String;

Property Marks As %String;

Index RollNoMarks On (RollNo, Marks) [ IdKey, Unique ];

Here we have some two properties, to store both values separately, but we used both of their values as IdKey.

Now it is possible to check of existing an object by ##class(User.School).%ExistsId(RollNo_"||"_Marks), or open id by  ##class(User.School).%OpenId(RollNo_"||"_Marks)

It's actually a very interesting question, and actually mostly depends on what you really want to achieve.

First of all, you can redefine Dockerfile name in docker-compose.yml

version: '3.7'
      context: .
      dockerfile: Dockerfile.test

or just in docker build

docker build -f Dockerfile.test .


But there is another use case when you would need even different docker-compose.yml files. If you would want to split running like in the production and development environment.

It is not a big problem to make it with Caché. But I would recommend you to look at different ways. Using Caché just as a reverse proxy, looks like a sledgehammer to crack a nut.

First of all, you should go from an original source of users, I don't see it in your question, but it can be LDAP/AD or something else outside of Caché. 

I would look at Nginx for example, which is actually very flexible.

This feature was invented for IRIS. And not sure if Caché/Ensemble will get it. It would be better to move to IRIS, if you already thinking about containers.

There is an option in the settings: "objectscript.export.addCategory",  when it's set to true, it will add categories for different file types.

In uppercase CLS for files "cls",  and RTN for "int", "mac", "inc".

The next coming version will support the way to have more control over it, where the left side for extension of a file, and the right part for a category name

"objectscript.export.addCategory": {
  "cls": "_cls",
  "mac": "_mac",
  "int": "_int",
  "inc": "_inc"