Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions pypika/clickhouse/array.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import abc
from typing import Union
from typing import Union, Optional, TYPE_CHECKING

from pypika.terms import (
Field,
Expand All @@ -8,9 +8,14 @@
)
from pypika.utils import format_alias_sql

if TYPE_CHECKING:
from pypika.queries import Schema


class Array(Term):
def __init__(self, values: list, converter_cls=None, converter_options: dict = None, alias: str = None):
def __init__(
self, values: list, converter_cls=None, converter_options: Optional[dict] = None, alias: Optional[str] = None
):
super().__init__(alias)
self._values = values
self._converter_cls = converter_cls
Expand All @@ -35,14 +40,14 @@ def __init__(
self,
left_array: Union[Array, Field],
right_array: Union[Array, Field],
alias: str = None,
schema: str = None,
alias: Optional[str] = None,
schema: Optional["Schema"] = None,
):
self._left_array = left_array
self._right_array = right_array
self.alias = alias
self.schema = schema
self.args = tuple()
self.args = []
self.name = "hasAny"

def get_sql(self, with_alias=False, with_namespace=False, quote_char=None, dialect=None, **kwargs):
Expand All @@ -57,7 +62,7 @@ def get_sql(self, with_alias=False, with_namespace=False, quote_char=None, diale


class _AbstractArrayFunction(Function, metaclass=abc.ABCMeta):
def __init__(self, array: Union[Array, Field], alias: str = None, schema: str = None):
def __init__(self, array: Union[Array, Field], alias: Optional[str] = None, schema: Optional["Schema"] = None):
self.schema = schema
self.alias = alias
self.name = self.clickhouse_function()
Expand Down
6 changes: 4 additions & 2 deletions pypika/clickhouse/search_string.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import abc

from typing import Optional

from pypika.terms import Function
from pypika.utils import format_alias_sql


class _AbstractSearchString(Function, metaclass=abc.ABCMeta):
def __init__(self, name, pattern: str, alias: str = None):
def __init__(self, name, pattern: str, alias: Optional[str] = None):
super(_AbstractSearchString, self).__init__(self.clickhouse_function(), name, alias=alias)

self._pattern = pattern
Expand Down Expand Up @@ -50,7 +52,7 @@ def clickhouse_function(cls) -> str:


class _AbstractMultiSearchString(Function, metaclass=abc.ABCMeta):
def __init__(self, name, patterns: list, alias: str = None):
def __init__(self, name, patterns: list, alias: Optional[str] = None):
super(_AbstractMultiSearchString, self).__init__(self.clickhouse_function(), name, alias=alias)

self._patterns = patterns
Expand Down
33 changes: 18 additions & 15 deletions pypika/clickhouse/type_conversion.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,25 @@
Field,
Function,
)
from pypika.queries import Schema
from pypika.utils import format_alias_sql

from typing import Optional


class ToString(Function):
def __init__(self, name, alias: str = None):
def __init__(self, name, alias: Optional[str] = None):
super(ToString, self).__init__("toString", name, alias=alias)


class ToFixedString(Function):
def __init__(self, field, length: int, alias: str = None, schema: str = None):
def __init__(self, field, length: int, alias: Optional[str] = None, schema: Optional[Schema] = None):
self._length = length
self._field = field
self.alias = alias
self.name = "toFixedString"
self.schema = schema
self.args = ()
self.args = []

def get_sql(self, with_alias=False, with_namespace=False, quote_char=None, dialect=None, **kwargs):
sql = "{name}({field},{length})".format(
Expand All @@ -29,60 +32,60 @@ def get_sql(self, with_alias=False, with_namespace=False, quote_char=None, diale


class ToInt8(Function):
def __init__(self, name, alias: str = None):
def __init__(self, name, alias: Optional[str] = None):
super(ToInt8, self).__init__("toInt8", name, alias=alias)


class ToInt16(Function):
def __init__(self, name, alias: str = None):
def __init__(self, name, alias: Optional[str] = None):
super(ToInt16, self).__init__("toInt16", name, alias=alias)


class ToInt32(Function):
def __init__(self, name, alias: str = None):
def __init__(self, name, alias: Optional[str] = None):
super(ToInt32, self).__init__("toInt32", name, alias=alias)


class ToInt64(Function):
def __init__(self, name, alias: str = None):
def __init__(self, name, alias: Optional[str] = None):
super(ToInt64, self).__init__("toInt64", name, alias=alias)


class ToUInt8(Function):
def __init__(self, name, alias: str = None):
def __init__(self, name, alias: Optional[str] = None):
super(ToUInt8, self).__init__("toUInt8", name, alias=alias)


class ToUInt16(Function):
def __init__(self, name, alias: str = None):
def __init__(self, name, alias: Optional[str] = None):
super(ToUInt16, self).__init__("toUInt16", name, alias=alias)


class ToUInt32(Function):
def __init__(self, name, alias: str = None):
def __init__(self, name, alias: Optional[str] = None):
super(ToUInt32, self).__init__("toUInt32", name, alias=alias)


class ToUInt64(Function):
def __init__(self, name, alias: str = None):
def __init__(self, name, alias: Optional[str] = None):
super(ToUInt64, self).__init__("toUInt64", name, alias=alias)


class ToFloat32(Function):
def __init__(self, name, alias: str = None):
def __init__(self, name, alias: Optional[str] = None):
super(ToFloat32, self).__init__("toFloat32", name, alias=alias)


class ToFloat64(Function):
def __init__(self, name, alias: str = None):
def __init__(self, name, alias: Optional[str] = None):
super(ToFloat64, self).__init__("toFloat64", name, alias=alias)


class ToDate(Function):
def __init__(self, name, alias: str = None):
def __init__(self, name, alias: Optional[str] = None):
super(ToDate, self).__init__("toDate", name, alias=alias)


class ToDateTime(Function):
def __init__(self, name, alias: str = None):
def __init__(self, name, alias: Optional[str] = None):
super(ToDateTime, self).__init__("toDateTime", name, alias=alias)
58 changes: 35 additions & 23 deletions pypika/dialects.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import itertools
from copy import copy
from typing import Any, Iterable, List, NoReturn, Optional, Set, Union, Tuple as TypedTuple, cast
from typing import Any, Iterable, List, Optional, Set, Union, Tuple as TypedTuple, cast, TYPE_CHECKING

if TYPE_CHECKING:
from typing_extensions import Self, NoReturn

from pypika.enums import Dialects
from pypika.queries import (
Expand All @@ -9,15 +12,24 @@
DropQueryBuilder,
Selectable,
Table,
Query,
BaseQuery,
QueryBuilder,
JoinOn,
)
from pypika.terms import ArithmeticExpression, Criterion, EmptyCriterion, Field, Function, Star, Term, ValueWrapper
from pypika.terms import (
ArithmeticExpression,
Criterion,
EmptyCriterion,
Field,
Function,
Star,
Term,
ValueWrapper,
)
from pypika.utils import QueryException, builder, format_quotes


class SnowflakeQuery(Query):
class SnowflakeQuery(BaseQuery["SnowflakeQueryBuilder"]):
"""
Defines a query class for use with Snowflake.
"""
Expand Down Expand Up @@ -61,7 +73,7 @@ def __init__(self) -> None:
super().__init__(dialect=Dialects.SNOWFLAKE)


class MySQLQuery(Query):
class MySQLQuery(BaseQuery["MySQLQueryBuilder"]):
"""
Defines a query class for use with MySQL.
"""
Expand Down Expand Up @@ -97,8 +109,8 @@ def __init__(self, **kwargs: Any) -> None:
self._for_update_skip_locked = False
self._for_update_of: Set[str] = set()

def __copy__(self) -> "MySQLQueryBuilder":
newone = cast(MySQLQueryBuilder, super().__copy__())
def __copy__(self) -> "Self":
newone = super().__copy__()
newone._duplicate_updates = copy(self._duplicate_updates)
newone._ignore_duplicates = copy(self._ignore_duplicates)
return newone
Expand Down Expand Up @@ -228,7 +240,7 @@ class MySQLDropQueryBuilder(DropQueryBuilder):
QUOTE_CHAR = "`"


class VerticaQuery(Query):
class VerticaQuery(BaseQuery["VerticaQueryBuilder"]):
"""
Defines a query class for use with Vertica.
"""
Expand Down Expand Up @@ -350,7 +362,7 @@ def __str__(self) -> str:
return self.get_sql()


class OracleQuery(Query):
class OracleQuery(BaseQuery["OracleQueryBuilder"]):
"""
Defines a query class for use with Oracle.
"""
Expand All @@ -374,7 +386,7 @@ def get_sql(self, *args: Any, **kwargs: Any) -> str:
return super().get_sql(*args, **kwargs)


class PostgreSQLQuery(Query):
class PostgreSQLQuery(BaseQuery["PostgreSQLQueryBuilder"]):
"""
Defines a query class for use with PostgreSQL.
"""
Expand Down Expand Up @@ -406,8 +418,8 @@ def __init__(self, **kwargs: Any) -> None:
self._for_update_skip_locked = False
self._for_update_of: Set[str] = set()

def __copy__(self) -> "PostgreSQLQueryBuilder":
newone = cast(PostgreSQLQueryBuilder, super().__copy__())
def __copy__(self) -> "Self":
newone = super().__copy__()
newone._returns = copy(self._returns)
newone._on_conflict_do_updates = copy(self._on_conflict_do_updates)
return newone
Expand All @@ -428,7 +440,7 @@ def for_update(self, nowait: bool = False, skip_locked: bool = False, of: TypedT
self._for_update_of = set(of)

@builder
def on_conflict(self, *target_fields: Union[str, Term]) -> None:
def on_conflict(self, *target_fields: Union[str, Term, None]) -> None:
if not self._insert_table:
raise QueryException("On conflict only applies to insert query")

Expand Down Expand Up @@ -655,7 +667,7 @@ def get_sql(self, with_alias: bool = False, subquery: bool = False, **kwargs: An
return querystring


class RedshiftQuery(Query):
class RedshiftQuery(BaseQuery["RedShiftQueryBuilder"]):
"""
Defines a query class for use with Amazon Redshift.
"""
Expand All @@ -669,7 +681,7 @@ class RedShiftQueryBuilder(QueryBuilder):
QUERY_CLS = RedshiftQuery


class MSSQLQuery(Query):
class MSSQLQuery(BaseQuery["MSSQLQueryBuilder"]):
"""
Defines a query class for use with Microsoft SQL Server.
"""
Expand Down Expand Up @@ -751,7 +763,7 @@ def _select_sql(self, **kwargs: Any) -> str:
)


class ClickHouseQuery(Query):
class ClickHouseQuery(BaseQuery["ClickHouseQueryBuilder"]):
"""
Defines a query class for use with Yandex ClickHouse.
"""
Expand All @@ -767,23 +779,23 @@ def drop_database(cls, database: Union[Database, str]) -> "ClickHouseDropQueryBu
return ClickHouseDropQueryBuilder().drop_database(database)

@classmethod
def drop_table(self, table: Union[Table, str]) -> "ClickHouseDropQueryBuilder":
def drop_table(cls, table: Union[Table, str]) -> "ClickHouseDropQueryBuilder":
return ClickHouseDropQueryBuilder().drop_table(table)

@classmethod
def drop_dictionary(self, dictionary: str) -> "ClickHouseDropQueryBuilder":
def drop_dictionary(cls, dictionary: str) -> "ClickHouseDropQueryBuilder":
return ClickHouseDropQueryBuilder().drop_dictionary(dictionary)

@classmethod
def drop_quota(self, quota: str) -> "ClickHouseDropQueryBuilder":
def drop_quota(cls, quota: str) -> "ClickHouseDropQueryBuilder":
return ClickHouseDropQueryBuilder().drop_quota(quota)

@classmethod
def drop_user(self, user: str) -> "ClickHouseDropQueryBuilder":
def drop_user(cls, user: str) -> "ClickHouseDropQueryBuilder":
return ClickHouseDropQueryBuilder().drop_user(user)

@classmethod
def drop_view(self, view: str) -> "ClickHouseDropQueryBuilder":
def drop_view(cls, view: str) -> "ClickHouseDropQueryBuilder":
return ClickHouseDropQueryBuilder().drop_view(view)


Expand All @@ -799,7 +811,7 @@ def _update_sql(self, **kwargs: Any) -> str:
return "ALTER TABLE {table}".format(table=self._update_table.get_sql(**kwargs))

def _from_sql(self, with_namespace: bool = False, **kwargs: Any) -> str:
def _error_none(v) -> NoReturn:
def _error_none(v) -> "NoReturn":
raise TypeError("expect Selectable or QueryBuilder, got {}".format(type(v).__name__))

selectable = ",".join(
Expand Down Expand Up @@ -858,7 +870,7 @@ def get_value_sql(self, **kwargs: Any) -> str:
return super().get_value_sql(**kwargs)


class SQLLiteQuery(Query):
class SQLLiteQuery(BaseQuery["SQLLiteQueryBuilder"]):
"""
Defines a query class for use with Microsoft SQL Server.
"""
Expand Down
Loading