@Test public void testDynamicIntoDeclaredTemp() throws Exception { StringBuffer procedure = new StringBuffer("CREATE VIRTUAL PROCEDURE ") //$NON-NLS-1$ .append("BEGIN\n") //$NON-NLS-1$ .append("CREATE LOCAL TEMPORARY TABLE x (column1 string);") //$NON-NLS-1$ .append("execute string 'SELECT e1 FROM pm1.g2' as e1 string INTO x;\n") //$NON-NLS-1$ .append("select cast(column1 as integer) from x;\n") //$NON-NLS-1$ .append("END\n"); //$NON-NLS-1$ QueryMetadataInterface metadata = RealMetadataFactory.example1Cached(); // Validate ValidatorReport report = helpValidateInModeler("pm1.vsp36", procedure.toString(), metadata); //$NON-NLS-1$ assertEquals(report.toString(), 0, report.getItems().size()); }
@Test public void testDisallowUpdateOnMultisourceElement() throws Exception { Set<String> models = new HashSet<String>(); models.add("pm1"); ValidatorReport report = helpValidateInModeler("pm1.vsp36", "UPDATE PM1.G1 set SOURCE_NAME='blah'", new MultiSourceMetadataWrapper(RealMetadataFactory.example1(), models)); //$NON-NLS-1$ assertEquals(report.toString(), 1, report.getItems().size()); }
@Test public void testValidateObjectInComparison() throws Exception { String sql = "SELECT IntKey FROM BQT1.SmallA WHERE ObjectValue = 5"; //$NON-NLS-1$ ValidatorReport report = helpValidate(sql, new String[] {"ObjectValue = 5"}, RealMetadataFactory.exampleBQTCached()); //$NON-NLS-1$ assertEquals("Non-comparable expression of type object cannot be used in comparison: ObjectValue = 5.", report.toString()); //$NON-NLS-1$ }
@Test public void testValidateDynamicCommandWithNonTempGroup_InModeler() throws Exception{ // SQL is same as pm1.vsp36() in example1 String sql = "CREATE VIRTUAL PROCEDURE BEGIN execute string 'select ' || '1' as X integer into pm1.g3; END"; //$NON-NLS-1$ QueryMetadataInterface metadata = RealMetadataFactory.example1Cached(); // Validate ValidatorReport report = helpValidateInModeler("pm1.vsp36", sql, metadata); //$NON-NLS-1$ assertEquals(1, report.getItems().size()); assertEquals("Wrong number of elements being SELECTed INTO the target table. Expected 4 elements, but was 1.", report.toString()); //$NON-NLS-1$ }
@Test public void testDynamicDupUsing() throws Exception { String sql = "CREATE VIRTUAL PROCEDURE BEGIN execute string 'select ' || '1' as X integer into #temp using id=1, id=2; END"; //$NON-NLS-1$ QueryMetadataInterface metadata = RealMetadataFactory.example1Cached(); // Validate ValidatorReport report = helpValidateInModeler("pm1.vsp36", sql, metadata); //$NON-NLS-1$ assertEquals(1, report.getItems().size()); assertEquals("Elements cannot appear more than once in a SET or USING clause. The following elements are duplicated: [DVARS.id]", report.toString()); //$NON-NLS-1$ }
@Test public void testDefect12107() throws Exception{ QueryMetadataInterface metadata = RealMetadataFactory.example1Cached(); String sql = "SELECT SUM(DISTINCT lookup('pm1.g1', 'e2', 'e2', e2)) FROM pm1.g1"; //$NON-NLS-1$ Command command = helpResolve(sql, metadata); sql = "SELECT SUM(DISTINCT lookup('pm1.g1', 'e3', 'e2', e2)) FROM pm1.g1"; //$NON-NLS-1$ command = helpResolve(sql, metadata); ValidatorReport report = Validator.validate(command, metadata); assertEquals("The aggregate function SUM cannot be used with non-numeric expressions: SUM(DISTINCT lookup('pm1.g1', 'e3', 'e2', e2))", report.toString()); //$NON-NLS-1$ }
@Test public void testLookupKeyElementComparable() throws Exception { QueryMetadataInterface metadata = exampleMetadata2(); String sql = "SELECT lookup('test.group', 'e2', 'e3', convert(e2, blob)) AS x FROM test.group"; //$NON-NLS-1$ Command command = QueryParser.getQueryParser().parseCommand(sql); QueryResolver.resolveCommand(command, metadata); ValidatorReport report = Validator.validate(command, metadata); assertEquals("Non-comparable expression of type blob cannot be used as LOOKUP key columns: test.\"group\".e3.", report.toString()); //$NON-NLS-1$ }
ValidatorReport report = Validator.validate(command, metadata); if (report.hasItems()) { fail(report.toString());