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.
Files changed (104) hide show
  1. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/Makefile +1 -1
  2. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/PKG-INFO +1 -1
  3. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/docs/conf.py +3 -1
  4. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/pyproject.toml +1 -1
  5. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/detectors/logical.py +2 -2
  6. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/set_operations/__init__.py +4 -8
  7. {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
  8. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/set_operations/set_operation.py +0 -12
  9. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/binary_ops.py +2 -1
  10. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/functions.py +2 -1
  11. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/predicates.py +2 -1
  12. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/primitives.py +2 -1
  13. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/unary_ops.py +2 -1
  14. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/util.py +2 -1
  15. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/sql_errors.py +2 -2
  16. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/ast/__init__.py +1 -4
  17. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/.gitignore +0 -0
  18. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/.readthedocs.yaml +0 -0
  19. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/LICENSE +0 -0
  20. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/README.md +0 -0
  21. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/datasets/catalogs/constraints.json +0 -0
  22. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/datasets/catalogs/miedema.json +0 -0
  23. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/datasets/sql/constraints.sql +0 -0
  24. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/datasets/sql/miedema.sql +0 -0
  25. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/docs/Makefile +0 -0
  26. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/docs/index.rst +0 -0
  27. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/docs/make.bat +0 -0
  28. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/docs/requirements.txt +0 -0
  29. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/requirements.txt +0 -0
  30. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/__init__.py +0 -0
  31. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/__init__.py +0 -0
  32. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/builder/__init__.py +0 -0
  33. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/builder/queries.py +0 -0
  34. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/catalog.py +0 -0
  35. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/column.py +0 -0
  36. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/constraint.py +0 -0
  37. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/schema.py +0 -0
  38. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/catalog/table.py +0 -0
  39. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/detectors/__init__.py +0 -0
  40. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/detectors/base.py +0 -0
  41. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/detectors/complications.py +0 -0
  42. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/detectors/semantic.py +0 -0
  43. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/detectors/syntax.py +0 -0
  44. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/__init__.py +0 -0
  45. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/extractors.py +0 -0
  46. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/query.py +0 -0
  47. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/set_operations/select.py +0 -0
  48. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/smt.py +0 -0
  49. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/tokenized_sql.py +0 -0
  50. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/__init__.py +0 -0
  51. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/base.py +0 -0
  52. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/queries.py +0 -0
  53. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/query/typechecking/types.py +0 -0
  54. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/__init__.py +0 -0
  55. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/ast/column.py +0 -0
  56. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/ast/function.py +0 -0
  57. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/ast/subquery.py +0 -0
  58. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/ast/table.py +0 -0
  59. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/sql.py +0 -0
  60. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/src/sql_error_categorizer/util/tokens.py +0 -0
  61. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/test_detector.py +0 -0
  62. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/__init__.py +0 -0
  63. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_002_ambiguous_column.py +0 -0
  64. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_004_undefined_column.py +0 -0
  65. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_005_undefined_function.py +0 -0
  66. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_006_undefined_parameter.py +0 -0
  67. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_007_undefined_tables.py +0 -0
  68. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_008_invalid_schema_names.py +0 -0
  69. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_009_misspellings.py +0 -0
  70. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_013_data_type_mismatch.py +0 -0
  71. {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
  72. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_015_nested_aggregate_functions.py +0 -0
  73. {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
  74. {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
  75. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_019_using_where_twice.py +0 -0
  76. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_020_missing_from.py +0 -0
  77. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_021_comparison_with_null.py +0 -0
  78. {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
  79. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_024_duplicate_clause.py +0 -0
  80. {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
  81. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_030_keywords_order.py +0 -0
  82. {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
  83. {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
  84. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/1_syn/test_037_nonstandard_operators.py +0 -0
  85. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/2_sem/test_040_tautological_inconsistent_expressions.py +0 -0
  86. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/2_sem/test_041_distinct_sum_avg.py +0 -0
  87. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/2_sem/test_043_wildcards_without_like.py +0 -0
  88. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/2_sem/test_044_incorrect_wildcards.py +0 -0
  89. {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
  90. {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
  91. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/3_log/test_062_missing_join.py +0 -0
  92. {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
  93. {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
  94. {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
  95. {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
  96. {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
  97. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/detectors/4_com/test_088_like_no_wildcards.py +0 -0
  98. {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
  99. {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
  100. {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
  101. {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
  102. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/query/test_extractors.py +0 -0
  103. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/query/test_query.py +0 -0
  104. {sql_error_categorizer-0.1.9 → sql_error_categorizer-0.1.10}/tests/query/test_typechecking.py +0 -0
@@ -34,7 +34,7 @@ uninstall: $(VENV)
34
34
  $(VENV_BIN)/python -m pip uninstall -y $(NAME)
35
35
 
36
36
  documentation:
37
- make html -C docs/
37
+ make html SPHINXBUILD="../$(VENV_BIN)/sphinx-build" -C docs/
38
38
 
39
39
  test: install
40
40
  $(VENV_BIN)/python -m pytest
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sql_error_categorizer
3
- Version: 0.1.9
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 = ['_static']
32
+ html_static_path = [
33
+ # '_static',
34
+ ]
33
35
 
34
36
 
35
37
  # -- Autoapi -----------------------------------------------------------------
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sql_error_categorizer"
7
- version = "0.1.9"
7
+ version = "0.1.10"
8
8
  authors = [
9
9
  { name="Davide Ponzini", email="davide.ponzini95@gmail.com" },
10
10
  ]
@@ -711,14 +711,14 @@ class LogicalErrorDetector(BaseDetector):
711
711
 
712
712
  def _selects_star(self, ast: dict) -> bool:
713
713
  '''
714
- Checks if a 'SELECT *' is used in the query by looking for a 'Star'
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 'SELECT *' is found, otherwise False.
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, DataType
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, DataType
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, DataType
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, DataType, TupleType
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, DataType
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,4 +1,5 @@
1
- from .types import ResultType, DataType
1
+ from .types import ResultType
2
+ from sqlglot.expressions import DataType
2
3
  from dateutil.parser import parse
3
4
  from sqlglot import exp
4
5
 
@@ -1,7 +1,7 @@
1
- from enum import Enum
1
+ from enum import IntEnum
2
2
 
3
3
 
4
- class SqlErrors(Enum):
4
+ class SqlErrors(IntEnum):
5
5
  '''Enumeration of SQL error types with unique identifiers.'''
6
6
  SYN_1_OMITTING_CORRELATION_NAMES = 1
7
7
  SYN_2_AMBIGUOUS_COLUMN = 2
@@ -1,9 +1,6 @@
1
1
  '''Utility functions for processing SQL ASTs made with sqlglot.'''
2
2
 
3
- from .column import *
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