I like this idea:
Settting a property "HasDuplicates" during indexing
- Log in to post comments
I like this idea:
Settting a property "HasDuplicates" during indexing
having this done ~ 9 yrs back I can't resist to share my old solution (at that time for a UNIQUE on 2000 char)
- split Text into 4 sections in calculated properties e.g.
tx1 = $e(Text,1,500)
tx2 = $e(Text,501,1000)
tx3 = $e(Text,1001,1500)
tx4 = $e(Text,1501,2000)
- index them
- then you can build an SQL statement to have all 4 pieces identic.
you end up with a cascade of embedded SELECTS
It's not to fast but very precise.
Found it:
Exceptions to READ COMMITTED 1 of some more
see:
http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY…
That seems to be just a part of the problem
do this change
START TRANSACTION %COMMITMODE EXPLICIT ISOLATION LEVEL READ COMMITTED, READ WRITE
docs:
http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY…
being suspicious on any * do you see the same behavior for
select count(AttrA) into :ans from Test.Table)
And here's the complete recording:
https://www.youtube.com/watch?v=J3QLibe15xs
[ including 30 min break
]
Hi Eduard !
Being a little bit lazy I simplified the query (for less typing)
My example:
And it works fine for persistent and serial classes.
My hidden assumption: there is only 1 Storage Strategy.
The nice point about:
you get also storage locations of deleted (!!) properties
that eventually might be invisible in class definition.
![]()
ECP always acts as Master/Slave relation.
Server 2 holds the "FROM" DB as ECP master while Server1 pulls it down as ECP client.
So from logic Server2 just can "reply" to requests from Server1.
Though I'm not sure how a firewall in between has to be configured.
Assumimg you have both DB on the same instance but different namespaces "FROM" and "TO"
You may run a loop like this
set id=""
for cnt=1:1 {
set id=$ORDER(^|"FROM"|Data(""),1,value) quit:id=""
set ^|"TO"|Data(id+10000000)=value)
if cnt#100000 write cnt,?10,id,!
}For the connections of the host you may use ECP
For a more structured global you might need to use $QUERY()
The write is just to see progress
It might be tricky to feed PARAMETERS that are accepted by class compiler.
You may define properties by writing to ##class(%Dictionary.PropertyDefinition)
as part of a ##class(%Dictionary.ClassDefinition)
http://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?…
Parameters is then defined as array of %CacheString;
And you set it just as any other array. [SetAt() ..... ]
and then compile the class to use that property inside the class
This is nothing you may do on the fly.
YES it is !
Class %DeepSee.ResultSet has a method %CancelQuery that does the trick.
http://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?…
http://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?…
Chapter Using the Result Set API tells you some more details.
http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY…
especially:
If you used %ExecuteAsynch(), periodically check to see whether the query has completed. If the query uses any plug-ins, make sure that any pending results are also complete; pending results are the results from the plug-ins, which are executed separately from the query.
To determine the status of the query, call the %GetStatus() method of your instance. Or call the %GetQueryStatus() class method of %DeepSee.ResultSet. These methods return the status of the query and also (separately) the status of any pending results; see the class documentation for details.
Optionally, to cancel a query that has not yet completed, call the %CancelQuery() class method.
A practical example is seen in ##class( %DeepSee.UI.Analyzer). onunloadHandler()
Changing IDKey to %Integer is not enough for Bitmap Indexing
You also have to set MINVAL =1 to prevent 0 or negative integers !
Hi Scott,
analyzing ##class( EnsLib.SQL.Common).ExecuteProcedureParmArray(.....)
I think you should be able to provide a prepared Snapshot to set the required parameters.
At least $$$sysTRACE("Using initialized SnapShot "_(tNumRS+1)) points in this direction
So your code might look like this:
Set SelectPER355MC=##class(%ListOfObjects).%New()
Set preset=##class(EnsLib.SQL.Snapshot).%New()
Set preset.MaxRowsToGet=12000
do SelectPER355MC.SetAt(preset,1)
set tSC = ..Adapter.ExecuteProcedureParmArray(.SelectPER355MC,.output,SPQuery,"oi",.parm)
I have no environment to check the approach.
So it's up to you to verify it.
I'm sorry.
I'm not aware of ANY documentation on required privileges by any Query.
I understand quite well your intention but especially <Protect> is hard to trap double hard inside a Class Query
With privileged app you limit the scope and get control over access parameters.
I see, thanks !
up to now I would do it:
SELECT Name,Home_Street FROM Sample.Person ORDER BY +Home_Street
Where's the improvement ? I see no difference.
ERROR 5540 - User "UnknownUser" is not privileged for the operation.
This tells me that you don't login with a managed user with enough privileges.
So you could have a dedicated user just for this purpose.
OR
give "Unknown User" enough rights
OR
make use of a Privileged Application to assign temporary required Resources (my guess "%Developer")
more on this and pp.
http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.PortalHelpPa…
Adding a recipient to your mail could could eventually improve your result significantly
If no other part of your code does it.
http://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?…
Alexey,
You are totally right.
Indirection just does a mimic of "address" while it's in fact the "name" of a variable or global.
A kind of "symbolic addressing".
I used this rule of thumb:
selectivity > 8 % candidate for bitmap index
selectivity < 2 % normal index
in between it's a mater of investigation and other side conditions beyond selectivity
![]()
Olga,
You made my day.
It's really easy to follow and helps much more then the "short cutted" version.
I wish I had 5 votes.
![]()
I'd recommend Java as you are platform independent then.
Atelier + Eclipse are just another goody for developers
Hi Ken,
There is an easier way.
Instead of fiddling around with unpredictable params you just pass your whole symbol table = local variables
to your background job like this and use what you need in background
JOB ##class(%SYSTEM.OBJ.FM2Class).All():(:1):5
look for process-params + switch here
http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY…
Evgeny,
in SQL you have a CASE ... END block for selection
http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY…
CASE WHEN search_condition THEN value_expression [ WHEN search_condition THEN value_expression ... ] [ ELSE value_expression ] END CASE value_expression WHEN value_expression THEN value_expression [ WHEN value_expression THEN value_expression ... ] [ ELSE value_expression ] END
That's fine and nothing new.
You missed my point:
With the Class Query it's not self explaining if params got to Prepare() or to Execute()
http://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?…
I just learned from John Murray a few comments above
that you don't need a prepare with a Class Query.
I wasn't aware of that until a few hours ago.
Then it's obvious that any param has to go to Execute().
as the class is deployed YOU may have access to the sources.
SQL Error 417 = Security Error
You should check your access rights inside
- Windows
- Caché