# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. from typing import Any, List, Tuple from superset.db_engine_specs.base import BaseEngineSpec class ExasolEngineSpec(BaseEngineSpec): # pylint: disable=abstract-method """Engine spec for Exasol""" engine = "exa" max_column_name_length = 128 # Exasol's DATE_TRUNC function is PostgresSQL compatible _time_grain_functions = { None: "{col}", "PT1S": "DATE_TRUNC('second', {col})", "PT1M": "DATE_TRUNC('minute', {col})", "PT1H": "DATE_TRUNC('hour', {col})", "P1D": "DATE_TRUNC('day', {col})", "P1W": "DATE_TRUNC('week', {col})", "P1M": "DATE_TRUNC('month', {col})", "P0.25Y": "DATE_TRUNC('quarter', {col})", "P1Y": "DATE_TRUNC('year', {col})", } @classmethod def fetch_data(cls, cursor: Any, limit: int) -> List[Tuple]: data = super().fetch_data(cursor, limit) # Lists of `pyodbc.Row` need to be unpacked further return cls.pyodbc_rows_to_tuples(data)