def convert_literal(value): if isinstance(value, org.apache.calcite.sql.SqlBasicCall): operator_mapping = { "ARRAY": list, "MAP": lambda x: dict(zip(x[::2], x[1::2])), "MULTISET": set, "ROW": tuple, } operator = operator_mapping[str(value.getOperator())] operands = [convert_literal(o) for o in value.getOperandList()] return operator(operands) elif isinstance(value, com.dask.sql.parser.SqlKwargs): return convert_sql_kwargs(value.getMap()) else: literal_type = str(value.getTypeName()) if literal_type == "CHAR": return str(value.getStringValue()) elif literal_type == "DECIMAL" and value.isInteger(): literal_type = "BIGINT" literal_value = value.getValue() python_value = sql_to_python_value(literal_type, literal_value) return python_value
def __init__(self, range: com.google.common.collect.Range, literal_type: str): self.lower_endpoint = None self.lower_open = True if range.hasLowerBound(): self.lower_endpoint = sql_to_python_value( literal_type, range.lowerEndpoint()) self.lower_open = (range.lowerBoundType() == com.google.common.collect.BoundType.OPEN) self.upper_endpoint = None self.upper_open = True if range.hasUpperBound(): self.upper_endpoint = sql_to_python_value( literal_type, range.upperEndpoint()) self.upper_open = (range.upperBoundType() == com.google.common.collect.BoundType.OPEN)
def convert_literal(value): literal_type = str(value.getTypeName()) if literal_type == "CHAR": return str(value.getStringValue()) literal_value = value.getValue() python_value = sql_to_python_value(literal_type, literal_value) return python_value
def convert( self, rex: "org.apache.calcite.rex.RexNode", dc: DataContainer, context: "dask_sql.Context", ) -> Any: literal_value = rex.getValue() literal_type = str(rex.getType()) python_value = sql_to_python_value(literal_type, literal_value) return python_value
def convert( self, rex: "org.apache.calcite.rex.RexNode", dc: DataContainer, context: "dask_sql.Context", ) -> Any: literal_value = rex.getValue() literal_type = str(rex.getType()) if isinstance(literal_value, org.apache.calcite.util.Sarg): return SargPythonImplementation(literal_value, literal_type) python_value = sql_to_python_value(literal_type, literal_value) return python_value
def test_python_to_sql_to_python(): assert (type( sql_to_python_value(str(python_to_sql_type(np.dtype("int64"))), 54)) == np.int64)
def test_sql_to_python(): assert sql_to_python_value("CHAR(5)", "test 123") == "test 123" assert type(sql_to_python_value("BIGINT", 653)) == np.int64 assert sql_to_python_value("BIGINT", 653) == 653 assert sql_to_python_value("INTERVAL", 4) == timedelta(milliseconds=4)