Question
· Jan 3

Is there a CLI tool that will allow me to examine the routines in the database?

I need to verify that certain .m files have been compiled and inserted into the VA mumps database.  I need to do it on a schedule and thus I want to automate it.  Because of the automation I'd prefer not to use the IRIS web app. So if there were a similar CLI version that would be great. I see there is something called /usr/bin/iris but this seems to be a maintenance tool, not a IRIS.DAT querying tool.  I'd love to be wrong about that.

Please forgive my lack of proper nomenclature, clearly I'm a n00b.

Product version: IRIS 2023.3
Discussion (6)3
Log in or sign up to continue

I am not sure what you need or are looking for. If you want to list all the routines, you can do it by looping on the ^ROUTINE global. There are some other methods using System libraries to get this information. 

As a quick example, you can copy-paste the following code directly into the terminal to see if this is what you need: 

// In one line: 
SET routineName="" FOR  SET routineName=$ORDER(^ROUTINE(routineName)) QUIT:routineName=""  WRITE routineName, !

// More readable: 
SET routineName = ""
FOR {
    SET routineName = $ORDER(^ROUTINE(routineName))
    QUIT:routineName=""
    WRITE routineName, !
}

You need to look at timestamps in 2 globals:

^ROUTINE contains the source code of the routine.

^ROUTINE(RoutineName,0) = Timestamp when the routine was last saved.  ($ZTS format, local timezone).

^rOBJ contains the compiled object code.  This will not exist if the routine has never been compiled.

^rOBJ(RoutineName,"INT") = Timestamp when the INT routine was last compiled.

If the date in ^ROUTINE is later than in ^rOBJ, the compiled code may be out of synch with the source.  This isn't guaranteed though, since the last save doesn't necessarily reflect a code change that would require recompile.

For MAC routines you'll want to look at:

^rOBJ(RoutineName,"MAC") = Timestamp when MAC routine was last compiled

^rMAC(RoutineName,0) = Timestamp when MAC routine was last saved

For Classes I believe you want TimeChanged from %Dictionary.CompiledClass.  You can get that using SQL:

select TimeChanged from %Dictionary.CompiledClass where ID = FullyQualifiedClassName