@Test public void testOptionalParams() throws Exception { String ddl = "create foreign procedure proc (x integer, y string);\n"; TransformationMetadata tm = createMetadata(ddl); String sql = "call proc (1)"; //$NON-NLS-1$ StoredProcedure sp = (StoredProcedure) TestResolver.helpResolve(sql, tm); assertEquals(new Constant(null, DataTypeManager.DefaultDataClasses.STRING), sp.getParameter(2).getExpression()); sql = "call proc (1, 'a')"; //$NON-NLS-1$ sp = (StoredProcedure) TestResolver.helpResolve(sql, tm); assertEquals(new Constant("a", DataTypeManager.DefaultDataClasses.STRING), sp.getParameter(2).getExpression()); }
case LOGMSG: case ISLOGGABLE: String level = (String)((Constant)proc.getParameter(2).getExpression()).getValue(); String logContext = (String)((Constant)proc.getParameter(3).getExpression()).getValue(); Object message = null; if (sysProc == SystemAdminProcs.LOGMSG) { message = ((Constant)proc.getParameter(4).getExpression()).getValue(); case SETPROPERTY: try { String uuid = (String)((Constant)proc.getParameter(2).getExpression()).getValue(); String key = (String)((Constant)proc.getParameter(3).getExpression()).getValue(); Clob value = (Clob)((Constant)proc.getParameter(4).getExpression()).getValue(); key = MetadataFactory.resolvePropertyKey(null, key); String strVal = null; final Table table = indexMetadata.getGroupID((String)((Constant)proc.getParameter(1).getExpression()).getValue()); switch (sysProc) { case SETCOLUMNSTATS: final String columnName = (String)((Constant)proc.getParameter(2).getExpression()).getValue(); Column c = null; for (Column col : table.getColumns()) { Number distinctVals = (Number)((Constant)proc.getParameter(3).getExpression()).getValue(); Number nullVals = (Number)((Constant)proc.getParameter(4).getExpression()).getValue(); String max = (String) ((Constant)proc.getParameter(5).getExpression()).getValue(); String min = (String) ((Constant)proc.getParameter(6).getExpression()).getValue(); final ColumnStats columnStats = new ColumnStats(); columnStats.setDistinctValues(distinctVals);
case LOGMSG: case ISLOGGABLE: String level = (String)((Constant)proc.getParameter(2).getExpression()).getValue(); String logContext = (String)((Constant)proc.getParameter(3).getExpression()).getValue(); Object message = null; if (sysProc == SystemAdminProcs.LOGMSG) { message = ((Constant)proc.getParameter(4).getExpression()).getValue(); case SETPROPERTY: try { String uuid = (String)((Constant)proc.getParameter(2).getExpression()).getValue(); String key = (String)((Constant)proc.getParameter(3).getExpression()).getValue(); Clob value = (Clob)((Constant)proc.getParameter(4).getExpression()).getValue(); key = MetadataFactory.resolvePropertyKey(null, key); String strVal = null; final Table table = indexMetadata.getGroupID((String)((Constant)proc.getParameter(1).getExpression()).getValue()); switch (sysProc) { case SETCOLUMNSTATS: final String columnName = (String)((Constant)proc.getParameter(2).getExpression()).getValue(); Column c = null; for (Column col : table.getColumns()) { Number distinctVals = (Number)((Constant)proc.getParameter(3).getExpression()).getValue(); Number nullVals = (Number)((Constant)proc.getParameter(4).getExpression()).getValue(); String max = (String) ((Constant)proc.getParameter(5).getExpression()).getValue(); String min = (String) ((Constant)proc.getParameter(6).getExpression()).getValue(); final ColumnStats columnStats = new ColumnStats(); columnStats.setDistinctValues(distinctVals);
case LOGMSG: case ISLOGGABLE: String level = (String)((Constant)proc.getParameter(2).getExpression()).getValue(); String logContext = (String)((Constant)proc.getParameter(3).getExpression()).getValue(); Object message = null; if (sysProc == SystemAdminProcs.LOGMSG) { message = ((Constant)proc.getParameter(4).getExpression()).getValue(); case SETPROPERTY: try { String uuid = (String)((Constant)proc.getParameter(2).getExpression()).getValue(); String key = (String)((Constant)proc.getParameter(3).getExpression()).getValue(); Clob value = (Clob)((Constant)proc.getParameter(4).getExpression()).getValue(); key = MetadataFactory.resolvePropertyKey(null, key); String strVal = null; final Table table = indexMetadata.getGroupID((String)((Constant)proc.getParameter(1).getExpression()).getValue()); switch (sysProc) { case SETCOLUMNSTATS: final String columnName = (String)((Constant)proc.getParameter(2).getExpression()).getValue(); Column c = null; for (Column col : table.getColumns()) { Number distinctVals = (Number)((Constant)proc.getParameter(3).getExpression()).getValue(); Number nullVals = (Number)((Constant)proc.getParameter(4).getExpression()).getValue(); String max = (String) ((Constant)proc.getParameter(5).getExpression()).getValue(); String min = (String) ((Constant)proc.getParameter(6).getExpression()).getValue(); final ColumnStats columnStats = new ColumnStats(); columnStats.setDistinctValues(distinctVals);
@Test public void testVarArgs2() throws Exception { String ddl = "create foreign procedure proc (VARIADIC z object) returns (x string);\n"; TransformationMetadata tm = createMetadata(ddl); String sql = "call proc ()"; //$NON-NLS-1$ StoredProcedure sp = (StoredProcedure) TestResolver.helpResolve(sql, tm); assertEquals("EXEC proc()", sp.toString()); assertEquals(new Array(DataTypeManager.DefaultDataClasses.OBJECT, new ArrayList<Expression>(0)), sp.getParameter(1).getExpression()); sql = "call proc (1, (2, 3))"; //$NON-NLS-1$ sp = (StoredProcedure) TestResolver.helpResolve(sql, tm); assertEquals("EXEC proc(1, (2, 3))", sp.toString()); ArrayList<Expression> expressions = new ArrayList<Expression>(); expressions.add(new Constant(1)); expressions.add(new Array(DataTypeManager.DefaultDataClasses.INTEGER, Arrays.asList((Expression)new Constant(2), new Constant(3)))); assertEquals(new Array(DataTypeManager.DefaultDataClasses.OBJECT, expressions), sp.getParameter(1).getExpression()); }
@Test public void testOptionalParams1() throws Exception { String ddl = "create foreign procedure proc (x integer, y string NOT NULL, z integer);\n"; TransformationMetadata tm = createMetadata(ddl); String sql = "call proc (1, 'a')"; //$NON-NLS-1$ StoredProcedure sp = (StoredProcedure) TestResolver.helpResolve(sql, tm); assertEquals(new Constant("a", DataTypeManager.DefaultDataClasses.STRING), sp.getParameter(2).getExpression()); }
final QueryMetadataInterface metadata = context.getMetadata(); if (StringUtil.endsWithIgnoreCase(proc.getProcedureCallableName(), REFRESHMATVIEW)) { Object groupID = validateMatView(metadata, (String)((Constant)proc.getParameter(2).getExpression()).getValue()); TempMetadataID matTableId = context.getGlobalTableStore().getGlobalTempTableMetadataId(groupID); final GlobalTableStore globalStore = getGlobalStore(context, matTableId); String matTableName = metadata.getFullName(matTableId); LogManager.logDetail(LogConstants.CTX_MATVIEWS, "processing refreshmatview for", matViewName); //$NON-NLS-1$ boolean invalidate = Boolean.TRUE.equals(((Constant)proc.getParameter(3).getExpression()).getValue()); boolean needsLoading = globalStore.getMatTableInfo(matTableName).getAndClearAsynch(); if (!needsLoading) { return loadGlobalTable(context, matTable, matTableName, globalStore); } else if (StringUtil.endsWithIgnoreCase(proc.getProcedureCallableName(), REFRESHMATVIEWROWS)) { final Object groupID = validateMatView(metadata, (String)((Constant)proc.getParameter(2).getExpression()).getValue()); TempMetadataID matTableId = context.getGlobalTableStore().getGlobalTempTableMetadataId(groupID); final GlobalTableStore globalStore = getGlobalStore(context, matTableId); Object[][] params = (Object[][]) ((ArrayImpl) ((Constant)proc.getParameter(3).getExpression()).getValue()).getValues(); return updateMatviewRows(context, metadata, groupID, globalStore, matViewName, ids, params); } else if (StringUtil.endsWithIgnoreCase(proc.getProcedureCallableName(), REFRESHMATVIEWROW)) { final Object groupID = validateMatView(metadata, (String)((Constant)proc.getParameter(2).getExpression()).getValue()); TempMetadataID matTableId = context.getGlobalTableStore().getGlobalTempTableMetadataId(groupID); final GlobalTableStore globalStore = getGlobalStore(context, matTableId); Constant key = (Constant)proc.getParameter(3).getExpression(); Object initialValue = key.getValue(); SPParameter keyOther = proc.getParameter(4); Object[] param = null;
@Test public void testVarArgs() throws Exception { String ddl = "create foreign procedure proc (x integer, VARIADIC z integer) returns (x string);\n"; TransformationMetadata tm = createMetadata(ddl); String sql = "call proc (1, 2, 3)"; //$NON-NLS-1$ StoredProcedure sp = (StoredProcedure) TestResolver.helpResolve(sql, tm); assertEquals("EXEC proc(1, 2, 3)", sp.toString()); assertEquals(new Constant(1), sp.getParameter(1).getExpression()); assertEquals(new Array(DataTypeManager.DefaultDataClasses.INTEGER, Arrays.asList((Expression)new Constant(2), new Constant(3))), sp.getParameter(2).getExpression()); assertEquals(SPParameter.RESULT_SET, sp.getParameter(3).getParameterType()); sql = "call proc (1)"; //$NON-NLS-1$ sp = (StoredProcedure) TestResolver.helpResolve(sql, tm); assertEquals("EXEC proc(1)", sp.toString()); assertEquals(new Array(DataTypeManager.DefaultDataClasses.INTEGER, new ArrayList<Expression>(0)), sp.getParameter(2).getExpression()); sp = (StoredProcedure) QueryRewriter.evaluateAndRewrite(sp, new Evaluator(null, null, null), null, tm); LanguageBridgeFactory lbf = new LanguageBridgeFactory(tm); Call call = (Call)lbf.translate(sp); assertEquals("EXEC proc(1)", call.toString()); sql = "call proc (1, (2, 3))"; //$NON-NLS-1$ sp = (StoredProcedure) TestResolver.helpResolve(sql, tm); assertEquals("EXEC proc(1, (2, 3))", sp.toString()); assertEquals(new Constant(1), sp.getParameter(1).getExpression()); assertEquals(new Array(DataTypeManager.DefaultDataClasses.INTEGER, Arrays.asList((Expression)new Constant(2), new Constant(3))), sp.getParameter(2).getExpression()); assertEquals(SPParameter.RESULT_SET, sp.getParameter(3).getParameterType()); }
final QueryMetadataInterface metadata = context.getMetadata(); if (StringUtil.endsWithIgnoreCase(proc.getProcedureCallableName(), REFRESHMATVIEW)) { Object groupID = validateMatView(metadata, (String)((Constant)proc.getParameter(2).getExpression()).getValue()); TempMetadataID matTableId = context.getGlobalTableStore().getGlobalTempTableMetadataId(groupID); final GlobalTableStore globalStore = getGlobalStore(context, matTableId); String matTableName = metadata.getFullName(matTableId); LogManager.logDetail(LogConstants.CTX_MATVIEWS, "processing refreshmatview for", matViewName); //$NON-NLS-1$ boolean invalidate = Boolean.TRUE.equals(((Constant)proc.getParameter(3).getExpression()).getValue()); boolean needsLoading = globalStore.getMatTableInfo(matTableName).getAndClearAsynch(); if (!needsLoading) { return loadGlobalTable(context, matTable, matTableName, globalStore); } else if (StringUtil.endsWithIgnoreCase(proc.getProcedureCallableName(), REFRESHMATVIEWROWS)) { final Object groupID = validateMatView(metadata, (String)((Constant)proc.getParameter(2).getExpression()).getValue()); TempMetadataID matTableId = context.getGlobalTableStore().getGlobalTempTableMetadataId(groupID); final GlobalTableStore globalStore = getGlobalStore(context, matTableId); Object[][] params = (Object[][]) ((ArrayImpl) ((Constant)proc.getParameter(3).getExpression()).getValue()).getValues(); return updateMatviewRows(context, metadata, groupID, globalStore, matViewName, ids, params); } else if (StringUtil.endsWithIgnoreCase(proc.getProcedureCallableName(), REFRESHMATVIEWROW)) { final Object groupID = validateMatView(metadata, (String)((Constant)proc.getParameter(2).getExpression()).getValue()); TempMetadataID matTableId = context.getGlobalTableStore().getGlobalTempTableMetadataId(groupID); final GlobalTableStore globalStore = getGlobalStore(context, matTableId); Constant key = (Constant)proc.getParameter(3).getExpression(); Object initialValue = key.getValue(); SPParameter keyOther = proc.getParameter(4); Object[] param = null;
final QueryMetadataInterface metadata = context.getMetadata(); if (StringUtil.endsWithIgnoreCase(proc.getProcedureCallableName(), REFRESHMATVIEW)) { Object groupID = validateMatView(metadata, (String)((Constant)proc.getParameter(2).getExpression()).getValue()); TempMetadataID matTableId = context.getGlobalTableStore().getGlobalTempTableMetadataId(groupID); final GlobalTableStore globalStore = getGlobalStore(context, matTableId); String matTableName = metadata.getFullName(matTableId); LogManager.logDetail(LogConstants.CTX_MATVIEWS, "processing refreshmatview for", matViewName); //$NON-NLS-1$ boolean invalidate = Boolean.TRUE.equals(((Constant)proc.getParameter(3).getExpression()).getValue()); boolean needsLoading = globalStore.getMatTableInfo(matTableName).getAndClearAsynch(); if (!needsLoading) { return loadGlobalTable(context, matTable, matTableName, globalStore); } else if (StringUtil.endsWithIgnoreCase(proc.getProcedureCallableName(), REFRESHMATVIEWROWS)) { final Object groupID = validateMatView(metadata, (String)((Constant)proc.getParameter(2).getExpression()).getValue()); TempMetadataID matTableId = context.getGlobalTableStore().getGlobalTempTableMetadataId(groupID); final GlobalTableStore globalStore = getGlobalStore(context, matTableId); Object[][] params = (Object[][]) ((ArrayImpl) ((Constant)proc.getParameter(3).getExpression()).getValue()).getValues(); return updateMatviewRows(context, metadata, groupID, globalStore, matViewName, ids, params); } else if (StringUtil.endsWithIgnoreCase(proc.getProcedureCallableName(), REFRESHMATVIEWROW)) { final Object groupID = validateMatView(metadata, (String)((Constant)proc.getParameter(2).getExpression()).getValue()); TempMetadataID matTableId = context.getGlobalTableStore().getGlobalTempTableMetadataId(groupID); final GlobalTableStore globalStore = getGlobalStore(context, matTableId); Constant key = (Constant)proc.getParameter(3).getExpression(); Object initialValue = key.getValue(); SPParameter keyOther = proc.getParameter(4); Object[] param = null;
@Test public void testVarArgs1() throws Exception { String ddl = "create foreign procedure proc (VARIADIC z integer) returns (x string);\n"; TransformationMetadata tm = createMetadata(ddl); String sql = "call proc ()"; //$NON-NLS-1$ StoredProcedure sp = (StoredProcedure) TestResolver.helpResolve(sql, tm); assertEquals("EXEC proc()", sp.toString()); assertEquals(new Array(DataTypeManager.DefaultDataClasses.INTEGER, new ArrayList<Expression>(0)), sp.getParameter(1).getExpression()); sp = (StoredProcedure) QueryRewriter.evaluateAndRewrite(sp, new Evaluator(null, null, null), null, tm); LanguageBridgeFactory lbf = new LanguageBridgeFactory(tm); Call call = (Call)lbf.translate(sp); assertEquals("EXEC proc()", call.toString()); //we pass to the translator level flattened, so no argument assertEquals(0, call.getArguments().size()); }