No, they’re minor points. They don’t need to be fixed.

> On Apr 22, 2016, at 9:30 AM, Michael Mior <[email protected]> wrote:
> 
> Fair points. I can make those changes if that's a concern.
> 
> --
> Michael Mior
> [email protected]
> 
> 2016-04-22 12:00 GMT-04:00 Julian Hyde <[email protected]>:
> 
>> Nice work, Michael. The only things I’d have done differently are to
>> rename the test case method from testFilterUUID to testFilterUuid (yes, we
>> camel-case acronyms), and to reference the JIRA case in a javadoc comment
>> against that method.
>> 
>>> On Apr 22, 2016, at 6:30 AM, [email protected] wrote:
>>> 
>>> Repository: calcite
>>> Updated Branches:
>>> refs/heads/master dd8d3c588 -> c07f33ae6
>>> 
>>> 
>>> [CALCITE-1210] Allow UUID filtering in Cassandra
>>> 
>>> 
>>> Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
>>> Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/c07f33ae
>>> Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/c07f33ae
>>> Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/c07f33ae
>>> 
>>> Branch: refs/heads/master
>>> Commit: c07f33ae62fd7b3c91713e3f7a038031fb7db5b9
>>> Parents: dd8d3c5
>>> Author: Michael Mior <[email protected]>
>>> Authored: Fri Apr 22 00:52:12 2016 -0400
>>> Committer: Michael Mior <[email protected]>
>>> Committed: Fri Apr 22 09:24:25 2016 -0400
>>> 
>>> ----------------------------------------------------------------------
>>> .../adapter/cassandra/CassandraFilter.java       | 17 ++++++++++++-----
>>> .../adapter/cassandra/CassandraSchema.java       |  8 ++++++--
>>> .../apache/calcite/test/CassandraAdapterIT.java  | 19 ++++++++++++++++---
>>> 3 files changed, 34 insertions(+), 10 deletions(-)
>>> ----------------------------------------------------------------------
>>> 
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/calcite/blob/c07f33ae/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraFilter.java
>>> ----------------------------------------------------------------------
>>> diff --git
>> a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraFilter.java
>> b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraFilter.java
>>> index 41eb3ad..ba8aa9c 100644
>>> ---
>> a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraFilter.java
>>> +++
>> b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraFilter.java
>>> @@ -27,10 +27,12 @@ import org.apache.calcite.rel.RelFieldCollation;
>>> import org.apache.calcite.rel.RelNode;
>>> import org.apache.calcite.rel.core.Filter;
>>> import org.apache.calcite.rel.metadata.RelMetadataQuery;
>>> +import org.apache.calcite.rel.type.RelDataType;
>>> import org.apache.calcite.rex.RexCall;
>>> import org.apache.calcite.rex.RexInputRef;
>>> import org.apache.calcite.rex.RexLiteral;
>>> import org.apache.calcite.rex.RexNode;
>>> +import org.apache.calcite.sql.type.SqlTypeName;
>>> import org.apache.calcite.util.Util;
>>> 
>>> import java.util.ArrayList;
>>> @@ -67,8 +69,8 @@ public class CassandraFilter extends Filter implements
>> CassandraRel {
>>>    this.implicitFieldCollations = implicitFieldCollations;
>>> 
>>>    Translator translator =
>>> -        new Translator(CassandraRules.cassandraFieldNames(getRowType()),
>>> -            partitionKeys, clusteringKeys, implicitFieldCollations);
>>> +        new Translator(getRowType(), partitionKeys, clusteringKeys,
>>> +            implicitFieldCollations);
>>>    this.match = translator.translateMatch(condition);
>>>    this.singlePartition = translator.isSinglePartition();
>>>    this.implicitCollation = translator.getImplicitCollation();
>>> @@ -111,15 +113,17 @@ public class CassandraFilter extends Filter
>> implements CassandraRel {
>>> 
>>>  /** Translates {@link RexNode} expressions into Cassandra expression
>> strings. */
>>>  static class Translator {
>>> +    private final RelDataType rowType;
>>>    private final List<String> fieldNames;
>>>    private final Set<String> partitionKeys;
>>>    private final List<String> clusteringKeys;
>>>    private int restrictedClusteringKeys;
>>>    private final List<RelFieldCollation> implicitFieldCollations;
>>> 
>>> -    Translator(List<String> fieldNames, List<String> partitionKeys,
>> List<String> clusteringKeys,
>>> +    Translator(RelDataType rowType, List<String> partitionKeys,
>> List<String> clusteringKeys,
>>>        List<RelFieldCollation> implicitFieldCollations) {
>>> -      this.fieldNames = fieldNames;
>>> +      this.rowType = rowType;
>>> +      this.fieldNames = CassandraRules.cassandraFieldNames(rowType);
>>>      this.partitionKeys = new HashSet<String>(partitionKeys);
>>>      this.clusteringKeys = clusteringKeys;
>>>      this.restrictedClusteringKeys = 0;
>>> @@ -267,7 +271,10 @@ public class CassandraFilter extends Filter
>> implements CassandraRel {
>>>      Object value = literalValue(right);
>>>      String valueString = value.toString();
>>>      if (value instanceof String) {
>>> -        valueString = "'" + valueString + "'";
>>> +        SqlTypeName typeName = rowType.getField(name, true,
>> false).getType().getSqlTypeName();
>>> +        if (typeName != SqlTypeName.CHAR) {
>>> +          valueString = "'" + valueString + "'";
>>> +        }
>>>      }
>>>      return name + " " + op + " " + valueString;
>>>    }
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/calcite/blob/c07f33ae/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraSchema.java
>>> ----------------------------------------------------------------------
>>> diff --git
>> a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraSchema.java
>> b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraSchema.java
>>> index 47312bf..2cbc342 100644
>>> ---
>> a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraSchema.java
>>> +++
>> b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraSchema.java
>>> @@ -120,9 +120,13 @@ public class CassandraSchema extends AbstractSchema
>> {
>>> 
>>>      // TODO: This mapping of types can be done much better
>>>      SqlTypeName typeName = SqlTypeName.ANY;
>>> -      if (type == DataType.ascii() || type == DataType.text() || type
>> == DataType.varchar()
>>> -            || type == DataType.uuid() || type == DataType.timeuuid()) {
>>> +      if (type == DataType.uuid() || type == DataType.timeuuid()) {
>>> +        // We currently rely on this in CassandraFilter to detect UUID
>> columns.
>>> +        // That is, these fixed length literals should be unquoted in
>> CQL.
>>>        typeName = SqlTypeName.CHAR;
>>> +      } else if (type == DataType.ascii() || type == DataType.text()
>>> +            || type == DataType.varchar()) {
>>> +        typeName = SqlTypeName.VARCHAR;
>>>      } else if (type == DataType.cint() || type == DataType.varint()) {
>>>        typeName = SqlTypeName.INTEGER;
>>>      } else if (type == DataType.bigint()) {
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/calcite/blob/c07f33ae/cassandra/src/test/java/org/apache/calcite/test/CassandraAdapterIT.java
>>> ----------------------------------------------------------------------
>>> diff --git
>> a/cassandra/src/test/java/org/apache/calcite/test/CassandraAdapterIT.java
>> b/cassandra/src/test/java/org/apache/calcite/test/CassandraAdapterIT.java
>>> index 8cf6673..c0e92a9 100644
>>> ---
>> a/cassandra/src/test/java/org/apache/calcite/test/CassandraAdapterIT.java
>>> +++
>> b/cassandra/src/test/java/org/apache/calcite/test/CassandraAdapterIT.java
>>> @@ -71,10 +71,23 @@ public class CassandraAdapterIT {
>>>        .returns("username=!PUBLIC!;
>> time=e8754000-80b8-1fe9-8e73-e3698c967ddd; "
>>>            + "tweet_id=f3c329de-d05b-11e5-b58b-90e2ba530b12\n")
>>>        .explainContains("PLAN=CassandraToEnumerableConverter\n"
>>> -           + "  CassandraFilter(condition=[=(CAST($0):CHAR(8) CHARACTER
>> SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\", '!PUBLIC!')])\n"
>>> +           + "  CassandraFilter(condition=[=(CAST($0):VARCHAR(8)
>> CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\",
>> '!PUBLIC!')])\n"
>>>           + "    CassandraTableScan(table=[[twissandra, userline]]");
>>>  }
>>> 
>>> +  @Test public void testFilterUUID() {
>>> +    CalciteAssert.that()
>>> +        .enable(enabled())
>>> +        .with(TWISSANDRA)
>>> +        .query("select * from \"tweets\" where
>> \"tweet_id\"='f3cd759c-d05b-11e5-b58b-90e2ba530b12'")
>>> +        .limit(1)
>>> +        .returns("tweet_id=f3cd759c-d05b-11e5-b58b-90e2ba530b12; "
>>> +            + "body=Lacus augue pede posuere.; username=JmuhsAaMdw\n")
>>> +        .explainContains("PLAN=CassandraToEnumerableConverter\n"
>>> +           + "  CassandraFilter(condition=[=(CAST($0):CHAR(36)
>> CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\",
>> 'f3cd759c-d05b-11e5-b58b-90e2ba530b12')])\n"
>>> +           + "    CassandraTableScan(table=[[twissandra, tweets]]");
>>> +  }
>>> +
>>>  @Test public void testSort() {
>>>    CalciteAssert.that()
>>>        .enable(enabled())
>>> @@ -83,7 +96,7 @@ public class CassandraAdapterIT {
>>>        .returnsCount(146)
>>>        .explainContains("PLAN=CassandraToEnumerableConverter\n"
>>>            + "  CassandraSort(sort0=[$1], dir0=[DESC])\n"
>>> -            + "    CassandraFilter(condition=[=(CAST($0):CHAR(8)
>> CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\",
>> '!PUBLIC!')])\n");
>>> +            + "    CassandraFilter(condition=[=(CAST($0):VARCHAR(8)
>> CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\",
>> '!PUBLIC!')])\n");
>>>  }
>>> 
>>>  @Test public void testProject() {
>>> @@ -95,7 +108,7 @@ public class CassandraAdapterIT {
>>>        .explainContains("PLAN=CassandraToEnumerableConverter\n"
>>>                + "  CassandraProject(tweet_id=[$2])\n"
>>>                + "    CassandraSort(fetch=[1])\n"
>>> -                + "      CassandraFilter(condition=[=(CAST($0):CHAR(8)
>> CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\",
>> '!PUBLIC!')])\n");
>>> +                + "
>> CassandraFilter(condition=[=(CAST($0):VARCHAR(8) CHARACTER SET
>> \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\", '!PUBLIC!')])\n");
>>>  }
>>> 
>>>  @Test public void testMaterializedView() {
>>> 
>> 
>> 

Reply via email to