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)
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)
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