Exemple #1
0
    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
Exemple #2
0
        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)
Exemple #3
0
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
Exemple #4
0
    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
Exemple #5
0
    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
Exemple #6
0
def test_python_to_sql_to_python():
    assert (type(
        sql_to_python_value(str(python_to_sql_type(np.dtype("int64"))),
                            54)) == np.int64)
Exemple #7
0
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)