@Test public void testProjection() throws SQLException { Connection conn = DriverManager.getConnection(getUrl()); try { conn.createStatement().execute("CREATE TABLE t(k INTEGER PRIMARY KEY, a.v1 VARCHAR, b.v2 VARCHAR, c.v3 VARCHAR)"); assertFamilies(projectQuery("SELECT k FROM t"), "A"); assertFamilies(projectQuery("SELECT k FROM t WHERE k = 5"), "A"); assertFamilies(projectQuery("SELECT v2 FROM t WHERE k = 5"), "A", "B"); assertFamilies(projectQuery("SELECT v2 FROM t WHERE v2 = 'a'"), "B"); assertFamilies(projectQuery("SELECT v3 FROM t WHERE v2 = 'a'"), "B", "C"); assertFamilies(projectQuery("SELECT v3 FROM t WHERE v2 = 'a' AND v3 is null"), "A", "B", "C"); } finally { conn.close(); } }
@Test public void testColumnProjectionOptimized() throws SQLException { Connection conn = DriverManager.getConnection(getUrl()); try { conn.createStatement().execute("CREATE TABLE t(k INTEGER PRIMARY KEY, a.v1 VARCHAR, a.v1b VARCHAR, b.v2 VARCHAR, c.v3 VARCHAR)"); assertTrue(hasColumnProjectionFilter(projectQuery("SELECT k, v1 FROM t WHERE v2 = 'foo'"))); assertFalse(hasColumnProjectionFilter(projectQuery("SELECT k, v1 FROM t WHERE v1 = 'foo'"))); assertFalse(hasColumnProjectionFilter(projectQuery("SELECT v1,v2 FROM t WHERE v1 = 'foo'"))); assertTrue(hasColumnProjectionFilter(projectQuery("SELECT v1,v2 FROM t WHERE v1 = 'foo' and v2 = 'bar' and v3 = 'bas'"))); assertFalse(hasColumnProjectionFilter(projectQuery("SELECT a.* FROM t WHERE v1 = 'foo' and v1b = 'bar'"))); } finally { conn.close(); } } @Test
@Test public void testOrderByWithNoProjection() throws SQLException { Connection conn = DriverManager.getConnection(getUrl()); try { conn.createStatement().execute("create table x (id integer primary key, A.i1 integer," + " B.i2 integer)"); Scan scan = projectQuery("select A.i1 from X group by i1 order by avg(B.i2) " + "desc"); ServerAggregators aggregators = ServerAggregators.deserialize(scan.getAttribute (BaseScannerRegionObserver.AGGREGATORS), null, null); assertEquals(2,aggregators.getAggregatorCount()); } finally { conn.close(); } }