sql-error-categorizer 0.1.9__tar.gz → 0.1.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/Makefile +1 -1
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/PKG-INFO +1 -1
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/docs/conf.py +3 -1
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/pyproject.toml +1 -1
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/detectors/logical.py +2 -2
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/set_operations/__init__.py +4 -8
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/set_operations/binary_set_operation.py +13 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/set_operations/set_operation.py +0 -12
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/binary_ops.py +2 -1
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/functions.py +2 -1
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/predicates.py +2 -1
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/primitives.py +2 -1
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/unary_ops.py +2 -1
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/util.py +2 -1
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/sql_errors.py +2 -2
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/ast/__init__.py +1 -4
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/.gitignore +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/.readthedocs.yaml +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/LICENSE +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/README.md +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/datasets/catalogs/constraints.json +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/datasets/catalogs/miedema.json +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/datasets/sql/constraints.sql +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/datasets/sql/miedema.sql +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/docs/Makefile +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/docs/index.rst +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/docs/make.bat +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/docs/requirements.txt +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/requirements.txt +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/__init__.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/__init__.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/builder/__init__.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/builder/queries.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/catalog.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/column.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/constraint.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/schema.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/table.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/detectors/__init__.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/detectors/base.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/detectors/complications.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/detectors/semantic.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/detectors/syntax.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/__init__.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/extractors.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/query.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/set_operations/select.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/smt.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/tokenized_sql.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/__init__.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/base.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/queries.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/types.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/__init__.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/ast/column.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/ast/function.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/ast/subquery.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/ast/table.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/sql.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/tokens.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/test_detector.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/__init__.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_002_ambiguous_column.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_004_undefined_column.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_005_undefined_function.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_006_undefined_parameter.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_007_undefined_tables.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_008_invalid_schema_names.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_009_misspellings.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_013_data_type_mismatch.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_014_aggregate_function_outside_select_or_having.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_015_nested_aggregate_functions.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_016_extraneous_omitted_grouping_column.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_017_having_without_group_by.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_019_using_where_twice.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_020_missing_from.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_021_comparison_with_null.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_022_038_additional_omitted_semicolons.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_024_duplicate_clause.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_026_too_many_columns_in_subquery.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_030_keywords_order.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_034_curly_square_or_unmatched_brackets.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_035_is_where_not_applicable.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_037_nonstandard_operators.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/2_sem/test_040_tautological_inconsistent_expressions.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/2_sem/test_041_distinct_sum_avg.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/2_sem/test_043_wildcards_without_like.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/2_sem/test_044_incorrect_wildcards.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/3_log/test_058_join_on_incorrect_table.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/3_log/test_059_join_when_join_needs_to_be_omitted.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/3_log/test_062_missing_join.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/3_log/test_070_extraneous_column_in_select.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/3_log/test_071_missing_column_from_select.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/3_log/test_072_missing_distinct_from_select.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/3_log/test_073_missing_as_from_select.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/4_com/test_083_unnecessary_distinct_in_select.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/4_com/test_088_like_no_wildcards.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/4_com/test_092_unnecessary_distinct_in_aggregate_function.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/4_com/test_095_group_by_with_singleton_groups.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/4_com/test_097_group_by_can_be_replaced_by_distinct.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/4_com/test_100_order_by_in_subquery.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/query/test_extractors.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/query/test_query.py +0 -0
- {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/query/test_typechecking.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sql_error_categorizer
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.10
|
|
4
4
|
Summary: This project analyses SQL statements and labels possible errors or complications.
|
|
5
5
|
Project-URL: Repository, https://github.com/DavidePonzini/sql_error_categorizer
|
|
6
6
|
Project-URL: Documentation, https://sql-error-categorizer.readthedocs.io/en/latest/index.html
|
|
@@ -29,7 +29,9 @@ exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
|
|
29
29
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
|
|
30
30
|
|
|
31
31
|
html_theme = 'alabaster'
|
|
32
|
-
html_static_path = [
|
|
32
|
+
html_static_path = [
|
|
33
|
+
# '_static',
|
|
34
|
+
]
|
|
33
35
|
|
|
34
36
|
|
|
35
37
|
# -- Autoapi -----------------------------------------------------------------
|
|
@@ -711,14 +711,14 @@ class LogicalErrorDetector(BaseDetector):
|
|
|
711
711
|
|
|
712
712
|
def _selects_star(self, ast: dict) -> bool:
|
|
713
713
|
'''
|
|
714
|
-
Checks if a
|
|
714
|
+
Checks if a `SELECT *` is used in the query by looking for a 'Star'
|
|
715
715
|
node in the AST's expression list.
|
|
716
716
|
|
|
717
717
|
Args:
|
|
718
718
|
ast: The Abstract Syntax Tree of the query.
|
|
719
719
|
|
|
720
720
|
Returns:
|
|
721
|
-
True if
|
|
721
|
+
True if `SELECT *` is found, otherwise False.
|
|
722
722
|
'''
|
|
723
723
|
if not ast:
|
|
724
724
|
return False
|
|
@@ -78,11 +78,9 @@ def create_set_operation_tree(sql: str, catalog: Catalog = Catalog(), search_pat
|
|
|
78
78
|
def parse_op_token(tok: sqlparse.sql.Token) -> tuple[str, bool | None] | None:
|
|
79
79
|
'''
|
|
80
80
|
Parse "UNION", "INTERSECT", "EXCEPT" with optional inline ALL/DISTINCT.
|
|
81
|
+
|
|
81
82
|
Returns:
|
|
82
|
-
tuple: `(op, all_flag)` where all_flag is:
|
|
83
|
-
- True if ALL inline (e.g., "UNION ALL")
|
|
84
|
-
- False if DISTINCT inline (e.g., "EXCEPT DISTINCT")
|
|
85
|
-
- None if no modifier inline (so caller may look right).
|
|
83
|
+
tuple: `(op, all_flag)` where all_flag is: True if ALL inline (e.g., "UNION ALL"); False if DISTINCT inline (e.g., "EXCEPT DISTINCT"); None if no modifier inline (so caller may look right).
|
|
86
84
|
'''
|
|
87
85
|
if tok.ttype is not Keyword:
|
|
88
86
|
return None
|
|
@@ -106,11 +104,9 @@ def split_on(tokens: list[sqlparse.sql.Token], idx: int, all_in_token: bool | No
|
|
|
106
104
|
'''
|
|
107
105
|
Splits around the operator at idx. If the modifier wasn't inline,
|
|
108
106
|
consume a single immediate ALL/DISTINCT to the right.
|
|
107
|
+
|
|
109
108
|
Returns:
|
|
110
|
-
tuple: A tuple containing:
|
|
111
|
-
- left_tokens (list[sqlparse.sql.Token]): Tokens to the left of the operator.
|
|
112
|
-
- right_tokens (list[sqlparse.sql.Token]): Tokens to the right of the operator
|
|
113
|
-
- all_flag (bool | None): True if ALL, False if DISTINCT, None if unspecified.
|
|
109
|
+
tuple: A tuple containing: left_tokens (list[sqlparse.sql.Token]): Tokens to the left of the operator; right_tokens (list[sqlparse.sql.Token]): Tokens to the right of the operator; all_flag (bool | None): True if ALL, False if DISTINCT, None if unspecified.
|
|
114
110
|
'''
|
|
115
111
|
left_tokens = tokens[:idx]
|
|
116
112
|
right_tokens = tokens[idx + 1:]
|
|
@@ -3,6 +3,7 @@ from ...catalog import Table, Constraint, ConstraintType, ConstraintColumn
|
|
|
3
3
|
|
|
4
4
|
from abc import ABC
|
|
5
5
|
from copy import deepcopy
|
|
6
|
+
import sqlglot
|
|
6
7
|
from sqlglot import exp
|
|
7
8
|
|
|
8
9
|
from typing import TYPE_CHECKING
|
|
@@ -44,6 +45,18 @@ class BinarySetOperation(SetOperation, ABC):
|
|
|
44
45
|
|
|
45
46
|
return result
|
|
46
47
|
|
|
48
|
+
@property
|
|
49
|
+
def trailing_ast(self) -> exp.Expression | None:
|
|
50
|
+
'''Parses and returns the AST of the trailing SQL clauses (e.g., ORDER BY, LIMIT) if present, with a fake `SELECT 1` prefix.'''
|
|
51
|
+
if self.trailing_sql is None:
|
|
52
|
+
return None
|
|
53
|
+
if self._trailing_ast is None:
|
|
54
|
+
# Parse trailing SQL with a fake SELECT to get valid AST
|
|
55
|
+
fake_sql = f'SELECT 1 {self.trailing_sql}'
|
|
56
|
+
parsed = sqlglot.parse_one(fake_sql)
|
|
57
|
+
self._trailing_ast = parsed
|
|
58
|
+
return self._trailing_ast
|
|
59
|
+
|
|
47
60
|
@property
|
|
48
61
|
def output(self) -> Table:
|
|
49
62
|
# Assume the output schema is the same as the left input
|
|
@@ -40,18 +40,6 @@ class SetOperation(ABC):
|
|
|
40
40
|
@abstractmethod
|
|
41
41
|
def print_tree(self, pre: str = '') -> None:
|
|
42
42
|
pass
|
|
43
|
-
|
|
44
|
-
@property
|
|
45
|
-
def trailing_ast(self) -> exp.Expression | None:
|
|
46
|
-
'''Parses and returns the AST of the trailing SQL clauses (e.g., ORDER BY, LIMIT) if present, with a fake `SELECT 1` prefix.'''
|
|
47
|
-
if self.trailing_sql is None:
|
|
48
|
-
return None
|
|
49
|
-
if self._trailing_ast is None:
|
|
50
|
-
# Parse trailing SQL with a fake SELECT to get valid AST
|
|
51
|
-
fake_sql = f'SELECT 1 {self.trailing_sql}'
|
|
52
|
-
parsed = sqlglot.parse_one(fake_sql)
|
|
53
|
-
self._trailing_ast = parsed
|
|
54
|
-
return self._trailing_ast
|
|
55
43
|
|
|
56
44
|
@property
|
|
57
45
|
@abstractmethod
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from .base import get_type
|
|
2
2
|
from ...catalog import Catalog
|
|
3
3
|
from sqlglot import exp
|
|
4
|
-
from .types import ResultType, AtomicType
|
|
4
|
+
from .types import ResultType, AtomicType
|
|
5
|
+
from sqlglot.expressions import DataType
|
|
5
6
|
from .util import is_number, to_number, to_date, error_message
|
|
6
7
|
|
|
7
8
|
@get_type.register
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from .base import get_type
|
|
2
2
|
from ...catalog import Catalog
|
|
3
3
|
from sqlglot import exp
|
|
4
|
-
from .types import ResultType, AtomicType
|
|
4
|
+
from .types import ResultType, AtomicType
|
|
5
|
+
from sqlglot.expressions import DataType
|
|
5
6
|
from .util import is_number, error_message
|
|
6
7
|
|
|
7
8
|
@get_type.register
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from .base import get_type
|
|
2
2
|
from ...catalog import Catalog
|
|
3
3
|
from sqlglot import exp
|
|
4
|
-
from .types import ResultType, AtomicType
|
|
4
|
+
from .types import ResultType, AtomicType
|
|
5
|
+
from sqlglot.expressions import DataType
|
|
5
6
|
from .util import is_string, to_number, to_date, error_message
|
|
6
7
|
|
|
7
8
|
@get_type.register
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from .base import get_type
|
|
2
2
|
from ...catalog import Catalog
|
|
3
3
|
from sqlglot import exp
|
|
4
|
-
from .types import ResultType, AtomicType,
|
|
4
|
+
from .types import ResultType, AtomicType, TupleType
|
|
5
|
+
from sqlglot.expressions import DataType
|
|
5
6
|
from .util import is_number, is_date, to_number, to_date, error_message
|
|
6
7
|
from ...util.ast.column import get_real_name, get_schema
|
|
7
8
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from .base import get_type
|
|
2
2
|
from ...catalog import Catalog
|
|
3
3
|
from sqlglot import exp
|
|
4
|
-
from .types import ResultType, AtomicType
|
|
4
|
+
from .types import ResultType, AtomicType
|
|
5
|
+
from sqlglot.expressions import DataType
|
|
5
6
|
from .util import is_number, error_message
|
|
6
7
|
|
|
7
8
|
@get_type.register
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
'''Utility functions for processing SQL ASTs made with sqlglot.'''
|
|
2
2
|
|
|
3
|
-
from .
|
|
4
|
-
from .function import *
|
|
5
|
-
from .subquery import *
|
|
6
|
-
from .table import *
|
|
3
|
+
from . import column, function, subquery, table
|
|
7
4
|
|
|
8
5
|
import sqlglot.optimizer.normalize
|
|
9
6
|
from sqlglot import exp
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/datasets/catalogs/constraints.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/smt.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/sql.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/query/test_typechecking.py
RENAMED
|
File without changes
|