Repository: phoenix Updated Branches: refs/heads/calcite 9f1eb6ef3 -> 605b25aff
PHOENIX-3394 Handle SequenceResolving through ConnectionQueryServices interface Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/605b25af Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/605b25af Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/605b25af Branch: refs/heads/calcite Commit: 605b25affd6d462720a11b4f6d703f9c6dc22587 Parents: 9f1eb6e Author: maryannxue <maryann....@gmail.com> Authored: Thu Nov 3 14:10:16 2016 -0700 Committer: maryannxue <maryann....@gmail.com> Committed: Thu Nov 3 14:10:16 2016 -0700 ---------------------------------------------------------------------- .../org/apache/phoenix/calcite/CalciteIT.java | 11 ++++++ .../apache/phoenix/calcite/PhoenixSchema.java | 38 ++++++++++---------- 2 files changed, 30 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/605b25af/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIT.java b/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIT.java index 5d60425..142fa1b 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIT.java @@ -1315,6 +1315,17 @@ public class CalciteIT extends BaseCalciteIT { {6L, "00A323122312312"}, {8L, "00A423122312312"}}) .close(); + + start(false, 1000f).sql("select CURRENT VALUE FOR my.seq1, entity_id from aTable where a_string = 'a'") + .explainIs("PhoenixToEnumerableConverter\n" + + " PhoenixClientProject(EXPR$0=[CURRENT_VALUE('\"MY\".\"SEQ1\"')], ENTITY_ID=[$1])\n" + + " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[=($2, 'a')])\n") + .resultIs(1, new Object[][]{ + {8L, "00A123122312312"}, + {8L, "00A223122312312"}, + {8L, "00A323122312312"}, + {8L, "00A423122312312"}}) + .close(); start(false, 1000f).sql("SELECT NEXT VALUE FOR seq0, item.\"item_id\", item.name, supp.\"supplier_id\", supp.name FROM " + JOIN_ITEM_TABLE_FULL_NAME + " item JOIN " + JOIN_SUPPLIER_TABLE_FULL_NAME + " supp ON item.\"supplier_id\" = supp.\"supplier_id\"") .explainIs("PhoenixToEnumerableConverter\n" + http://git-wip-us.apache.org/repos/asf/phoenix/blob/605b25af/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSchema.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSchema.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSchema.java index ac918b7..47b63fc 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSchema.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSchema.java @@ -14,19 +14,22 @@ import org.apache.calcite.schema.impl.ViewTable; import org.apache.calcite.sql.ListJarsTable; import org.apache.phoenix.compile.ColumnResolver; import org.apache.phoenix.compile.FromCompiler; +import org.apache.phoenix.compile.SequenceManager; import org.apache.phoenix.expression.function.UDFExpression; import org.apache.phoenix.jdbc.PhoenixConnection; -import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData; import org.apache.phoenix.parse.ColumnDef; import org.apache.phoenix.parse.NamedTableNode; import org.apache.phoenix.parse.PFunction; +import org.apache.phoenix.parse.SequenceValueParseNode; import org.apache.phoenix.parse.TableName; import org.apache.phoenix.schema.MetaDataClient; import org.apache.phoenix.schema.PColumn; import org.apache.phoenix.schema.PTable; +import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.schema.PTable.ViewType; import org.apache.phoenix.schema.PTableImpl; import org.apache.phoenix.schema.PTableType; +import org.apache.phoenix.schema.Sequence; import org.apache.phoenix.schema.TableNotFoundException; import org.apache.phoenix.schema.TableRef; import org.apache.phoenix.util.IndexUtil; @@ -34,7 +37,6 @@ import org.apache.phoenix.util.SchemaUtil; import java.sql.Connection; import java.sql.DriverManager; -import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; @@ -62,6 +64,7 @@ public class PhoenixSchema implements Schema { protected final String schemaName; protected final SchemaPlus parentSchema; protected final MetaDataClient client; + protected final SequenceManager sequenceManager; protected final Map<String, Schema> subSchemas; protected final Map<String, Table> tables; @@ -83,6 +86,12 @@ public class PhoenixSchema implements Schema { this.views = Maps.newHashMap(); this.views.put("ListJars", listJarsFunction); this.viewTables = Sets.newHashSet(); + try { + PhoenixStatement stmt = (PhoenixStatement) pc.createStatement(); + this.sequenceManager = new SequenceManager(stmt); + } catch (SQLException e){ + throw new RuntimeException(e); + } } @@ -329,24 +338,15 @@ public class PhoenixSchema implements Schema { private PhoenixSequence resolveSequence(String name) { try { - // FIXME: Do this the same way as resolving a table after PHOENIX-2489. - String tenantId = pc.getTenantId() == null ? null : pc.getTenantId().getString(); - String q = "select 1 from " + PhoenixDatabaseMetaData.SYSTEM_SEQUENCE - + " where " + PhoenixDatabaseMetaData.SEQUENCE_SCHEMA - + (schemaName == null ? " is null" : " = '" + schemaName + "'") - + " and " + PhoenixDatabaseMetaData.SEQUENCE_NAME - + " = '" + name + "'" - + " and " + PhoenixDatabaseMetaData.TENANT_ID - + (tenantId == null ? " is null" : " = '" + tenantId + "'"); - ResultSet rs = pc.createStatement().executeQuery(q); - if (rs.next()) { - return new PhoenixSequence(schemaName, name, pc); - } - } catch (SQLException e) { - throw new RuntimeException(e); + sequenceManager.newSequenceReference(pc.getTenantId(), + TableName.createNormalized(schemaName, name) , + null, SequenceValueParseNode.Op.NEXT_VALUE); + sequenceManager.validateSequences(Sequence.ValueOp.VALIDATE_SEQUENCE); + } catch (SQLException e){ + return null; } - - return null; + + return new PhoenixSequence(schemaName, name, pc); } /** Schema factory that creates a