private static void projectAllIndexColumns( StatementContext context, TableRef tableRef, List<Expression> projectedExpressions, List<ExpressionProjector> projectedColumns) throws SQLException { PTable index = tableRef.getTable(); PTable table = context.getConnection().getPMetaData().getTable(index.getParentName().getString()); int tableOffset = table.getBucketNum() == null ? 0 : 1; int indexOffset = index.getBucketNum() == null ? 0 : 1; if (index.getColumns().size() - indexOffset != table.getColumns().size() - tableOffset) { // We'll end up not using this by the optimizer, so just throw throw new ColumnNotFoundException(WildcardParseNode.INSTANCE.toString()); } for (int i = tableOffset; i < table.getColumns().size(); i++) { PColumn tableColumn = table.getColumns().get(i); PColumn indexColumn = index.getColumn(IndexUtil.getIndexColumnName(tableColumn)); ColumnRef ref = new ColumnRef(tableRef, indexColumn.getPosition()); Expression expression = ref.newColumnExpression(); projectedExpressions.add(expression); ExpressionProjector projector = new ExpressionProjector( tableColumn.getName().getString(), table.getName().getString(), expression, false); projectedColumns.add(projector); } }
@BeforeClass public static void doSetup() throws Exception { startServer(getUrl()); ensureTableCreated(getUrl(), ATABLE_NAME); ensureTableCreated(getUrl(), FUNKY_NAME); ensureTableCreated(getUrl(), PTSDB_NAME); ensureTableCreated(getUrl(), MULTI_CF_NAME); Properties props = new Properties(); props.setProperty( PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(MetaDataProtocol.MIN_TABLE_TIMESTAMP)); PhoenixConnection conn = DriverManager.getConnection(PHOENIX_CONNECTIONLESS_JDBC_URL, props) .unwrap(PhoenixConnection.class); try { PTable table = conn.getPMetaData().getTable(ATABLE_NAME); ATABLE = table; ORGANIZATION_ID = table.getColumn("ORGANIZATION_ID"); ENTITY_ID = table.getColumn("ENTITY_ID"); A_INTEGER = table.getColumn("A_INTEGER"); A_STRING = table.getColumn("A_STRING"); B_STRING = table.getColumn("B_STRING"); ENTITY_ID = table.getColumn("ENTITY_ID"); A_DATE = table.getColumn("A_DATE"); A_TIME = table.getColumn("A_TIME"); A_TIMESTAMP = table.getColumn("A_TIMESTAMP"); X_DECIMAL = table.getColumn("X_DECIMAL"); } finally { conn.close(); } }
private static void projectIndexColumnFamily( StatementContext context, String cfName, TableRef tableRef, List<Expression> projectedExpressions, List<ExpressionProjector> projectedColumns) throws SQLException { PTable index = tableRef.getTable(); PTable table = context.getConnection().getPMetaData().getTable(index.getParentName().getString()); PColumnFamily pfamily = table.getColumnFamily(cfName); for (PColumn column : pfamily.getColumns()) { PColumn indexColumn = index.getColumn(IndexUtil.getIndexColumnName(column)); ColumnRef ref = new ColumnRef(tableRef, indexColumn.getPosition()); Expression expression = ref.newColumnExpression(); projectedExpressions.add(expression); projectedColumns.add( new ExpressionProjector( column.getName().toString(), table.getName().getString(), expression, false)); } }