try
{
Dataholder[] argv = new Dataholder[1];
argv[0] = Dataholder.create(selectSQL);
Database conn = (JBindDatabase) CacheDatabase.getDatabase(_session.getSQLConnection().getConnection());
//Dataholder res = conn.runClassMethod("%Library.CMUtilities", "getExecutionPlan", argv, Database.RET_OBJECT);
Dataholder res = null;
try
{
res = conn.runClassMethod("CM.methM2", "M2", argv, Database.RET_OBJECT);
}
catch (CacheException e)
{
Statement stat = _session.getSQLConnection().createStatement();
stat.executeUpdate
(
"CREATE METHOD CM.M2(IN sql %String)" +
" RETURNS %GlobalCharacterStream" +
" LANGUAGE COS" +
" {" +
" quit:$get(sql)=\"\" \"\"" +
" kill %plan\n" +
" set outStream = ##class(%GlobalCharacterStream).%New()" +
" set sql(1)=sql,sql=1" +
" do ShowPlan^%apiSQL(.sql,1)" +
" set nSub = 1,line = \"\"" +
" set to = +$g(%plan)+1" +
" while nSub<to " +
" {" +
" set line = $g(%plan(nSub))" +
" do outStream.WriteLine(line)" +
" set nSub = nSub + 1" +
" }" +
" kill %plan\n" +
" quit outStream" +
" }"
);
stat.close();
res = conn.runClassMethod("CM.methM2", "M2", argv, Database.RET_OBJECT);
}
CacheObject cobj = res.getCacheObject();
CharacterStream characterStream = (CharacterStream) (cobj.newJavaInstance());