Restarting only the modified Business Host is enough.
- Log in to post comments
Restarting only the modified Business Host is enough.
Check the docs for SQL Gateway.
Just need to figure out (or take an advice!) how to exclude, say, system classes outright.
Something like this should work:
WHERE 1=1
AND NOT name %STARTSWITH '%'
AND NOT name %STARTSWITH 'CSP'
AND NOT name %STARTSWITH 'Ens'
AND NOT name %STARTSWITH 'INFORMATION.SCHEMA'Pinging @Michael Brady.
Will they compare INT's or CLS's, given it's about CompiledClass?
No idea. Do you think someone might have edited generated int code directly?
I think this is a task better suited for Version Control System, such as git.
And for CD/CI systems such as Jenkins, GitHub or GitLab.
That said you can use this SQL to compare class hashes (if hashes are identical than classes are identical)
SELECT
Name,
Hash,
TimeChanged,
TimeCreated
FROM %Dictionary.CompiledClassAfter that you can use this SQL to compare hashes of the individual methods (if classes do not match):
SELECT
parent,
Name,
RuntimeHash
FROM %Dictionary.CompiledMethodCheck this example of SQL to Excel.
You might need to adjust the code to use Outbound SQL Adapter but the general gist it the same.
This is an InterSystems IRIS functionality.
I recommend upgrading your Caché application to InterSystems IRIS.
InterSystems IRIS supports .Net Core 2.1 for Object Gateway and PEX.
Here's how you can package your .Net library into a Gateway container.
If the name of the setting is the same across all business hosts, you can use System Default Settings.
It is also possible to compress Blob/Clob data.
Please post a sample.
InterSystems IRIS 2020.2 added experimental support for Database compression.
By default IRIS listens on all interfaces.
Are you able to access SMP from a remote machine?
FYI InterSystems IRIS can generate QRCodes natively with %SYS.QRCode class.
Here's an example unarchiver.
$zf(-100) can be used to call arbitrary executables, such as 7zip.
Calling @Thomas Nitzsche
You might want to post your problem as a separate question.
That's good and well for sparse datasets (where say you have a record with 10 000 possible attributes but on average only 50 are filled).
EAV does not help in dense cases where every record actually has 10 000 attributes.
Wide datasets are fairly typical for:
I'm fairly sure there's more areas but I have not encountered them myself.
Recently I have delivered a PoC with classes more than 6400 columns wide and that's where I got my inspiration for this article (I chose approach 4).
@Renato Banzai also wrote an excellent article on his project with more than 999 properties.
Overall I'd like to say that a class with more than 999 properties is a correct design in many cases.
I have no concrete ideas on how to automate this.
This is a more case-by-case basis.
While I always advertise CSV2CLASS methods for generic solutions, wide datasets often possess an (un)fortunate characteristic of also being long.
In that case custom object-less parser works better.
Here's how it can be implemented.
1. Align storage schema with CSV structure
2. Modify this snippet for your class/CSV file:
Parameter GLVN = {..GLVN("Test.Record")};
Parameter SEPARATOR = ";";
ClassMethod Import(file = "source.csv", killExtent As %Boolean = {$$$YES})
{
set stream = ##class(%Stream.FileCharacter).%New()
do stream.LinkToFile(file)
kill:killExtent @..#GLVN
set i=0
set start = $zh
while 'stream.AtEnd {
set i = i + 1
set line = stream.ReadLine($$$MaxStringLength)
set @..#GLVN($i(@..#GLVN)) = ..ProcessLine(line)
write:'(i#100000) "Processed:", i, !
}
set end = $zh
write "Done",!
write "Time: ", end - start, !
}
ClassMethod ProcessLine(line As %String) As %List
{
set list = $lfs(line, ..#SEPARATOR)
set list2 = ""
set ptr=0
// NULLs and numbers handling.
// Add generic handlers here.
// For example translate "N/A" value into $lb() if that's how source data rolls
while $listnext(list, ptr, value) {
set list2 = list2 _ $select($g(value)="":$lb(), $ISVALIDNUM(value):$lb(+value), 1:$lb(value))
}
// Add specific handlers here
// For example convert date into horolog in column4
// Add %%CLASSNAME
set list2 = $lb() _ list2
quit list2
}The line of code which generated the error.
You can also translate the line of int code back into cls using this snippet.
@Renato Banzai, @Henrique Dias I just published an article about creating classes with more than 999 properties in InterSystems IRIS.
Restarting is the easiest way.
If you can't just overwrite global buffer with another global (but check that your target global is really flushed out of global buffer).
I think chart by the error origin would be interesting.
You can