Esempio n. 1
0
 def __init__(self, date_part, interval, term, alias=None):
     date_part = getattr(date_part, 'value', date_part)
     super(TimestampAdd, self).__init__("TIMESTAMPADD",
                                        LiteralValue(date_part),
                                        interval,
                                        term,
                                        alias=alias)
Esempio n. 2
0
 def __init__(self, date_part, interval, term, alias=None):
     date_part = getattr(date_part, "value", date_part)
     super(DateAdd, self).__init__("DATE_ADD",
                                   LiteralValue(date_part),
                                   interval,
                                   term,
                                   alias=alias)
def build_table_by_topic_id(topic_id) -> Table:
    topic = get_topic_by_id(topic_id)
    topic_col_name = build_collection_name(topic.name)
    datasource: DataSource = load_data_source_by_id(topic.dataSourceId)
    catalog_name = datasource.dataSourceCode
    schema_name = datasource.name
    schema = Schema(schema_name, LiteralValue(catalog_name))
    return Table(topic_col_name, schema)
def _process_filter_operator(operator_, left: dict, right: dict):
    left_type = left.get("type")
    left_value = left.get("value")
    right_type = right.get("type")
    right_value = right.get("value")
    if operator_ == "empty" or operator_ == "not-empty":
        return _build_filter_expression(operator_, left_value, right_value)
    if left_type == right_type:
        return _build_filter_expression(operator_, left_value, right_value)
    else:
        if left_type == "number" and right_type == "text":
            if operator_ == "in" or operator_ == "not-in":
                if isinstance(right_value, str):
                    right_value_list = right_value.split(",")
                    if left_type == "text":
                        return _build_filter_expression(
                            operator_, left_value, right_value_list)
                    elif left_type == "number":
                        right_value_trans_list = []
                        for value_ in right_value_list:
                            if value_.isdigit():
                                right_value_trans_list.append(Decimal(value_))
                        return _build_filter_expression(
                            operator_, left_value, right_value_trans_list)
            else:
                if isinstance(right_value, str):
                    right_trans_value = Decimal(right_value)
                    return _build_filter_expression(operator_, left_value,
                                                    right_trans_value)
                else:
                    return _build_filter_expression(operator_, left_value,
                                                    right_value)
        if left_type == "date" and right_type == "text":
            if isinstance(right_value, str):
                return _build_filter_expression(
                    operator_, left_value,
                    LiteralValue("DATE \'{0}\'".format(
                        arrow.get(right_value).format('YYYY-MM-DD'))))
        elif left_type == "datetime" and right_type == "text":
            return _build_filter_expression(
                operator_, left_value,
                LiteralValue("timestamp \'{0}\'".format(
                    arrow.get(right_value).format('YYYY-MM-DD HH:mm:ss'))))
        else:
            return _build_filter_expression(operator_, left_value, right_value)
Esempio n. 5
0
 def __init__(self, date_part, field, alias=None):
     date_part = getattr(date_part, "value", date_part)
     super(Extract, self).__init__("EXTRACT",
                                   LiteralValue(date_part),
                                   alias=alias)
     self.field = field
    def type_inference(self, operator_, left: ParseResult,
                       right: ParseResult) -> Tuple[str, Any, Any]:
        left_value = left.result
        left_value_type = left.value_type

        right_value = right.result
        right_value_type = right.value_type

        if operator_ == "empty" or operator_ == "not-empty":
            return operator_, left_value, right_value
        if left_value_type == right_value_type:
            if operator_ == "in" or operator_ == "not-in":
                if left_value_type == "number":
                    if isinstance(right_value, ValueWrapper):
                        value = right_value.value
                        right_value_list = value.split(",")
                        right_value_trans_list = []
                        for value_ in right_value_list:
                            if value_.isdigit():
                                right_value_trans_list.append(Decimal(value_))
                        return operator_, left_value, right_value_trans_list
                else:
                    if isinstance(right_value, ValueWrapper):
                        value = right_value.value
                        right_value_list = value.split(",")
                        right_value_trans_list = []
                        for value_ in right_value_list:
                            right_value_trans_list.append(value_)
                        return operator_, left_value, right_value_trans_list
            else:
                return operator_, left_value, right_value
        else:
            if left_value_type == "number" and right_value_type == "text":
                if operator_ == "in" or operator_ == "not-in":
                    if isinstance(right_value, ValueWrapper):
                        value = right_value.value
                        right_value_list = value.split(",")
                        right_value_trans_list = []
                        for value_ in right_value_list:
                            if value_.isdigit():
                                right_value_trans_list.append(Decimal(value_))
                        return operator_, left_value, right_value_trans_list
                else:
                    if isinstance(right_value, ValueWrapper):
                        value = right_value.value
                        right_trans_value = Decimal(value)
                        return operator_, left_value, right_trans_value
                    else:
                        return operator_, left_value, right_value
            if left_value_type == "date" and right_value_type == "text":
                if isinstance(right_value, ValueWrapper):
                    value = right_value.value
                    return operator_, left_value, LiteralValue(
                        "DATE \'{0}\'".format(
                            arrow.get(value).format('YYYY-MM-DD')))
            elif left_value_type == "datetime" and right_value_type == "text":
                if isinstance(right_value, ValueWrapper):
                    return operator_, \
                           left_value, \
                           LiteralValue("timestamp \'{0}\'".format(
                               arrow.get(right_value.value).format('YYYY-MM-DD HH:mm:ss')
                           ))
            else:
                return operator_, left_value, right_value