Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor Dialect_Flag #11273

Merged
merged 6 commits into from
Oct 14, 2024
Merged
Show file tree
Hide file tree
Changes from 5 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
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ import Standard.Database.Internal.Postgres.Postgres_Type_Mapping.Postgres_Type_M
import Standard.Database.Internal.SQL_Type_Mapping.SQL_Type_Mapping
import Standard.Database.Internal.SQL_Type_Reference.SQL_Type_Reference
import Standard.Database.Internal.Statement_Setter.Statement_Setter
import Standard.Database.Dialect_Flag.Dialect_Flag
import Standard.Database.SQL.SQL_Builder
import Standard.Database.SQL_Statement.SQL_Statement
import Standard.Database.SQL_Type.SQL_Type
from Standard.Database.Dialect import Temp_Table_Style
from Standard.Database.Dialect_Flags import all
from Standard.Database.Errors import SQL_Error, Unsupported_Database_Operation
from Standard.Database.Internal.JDBC_Connection import JDBC_Connection

Expand Down Expand Up @@ -132,23 +132,6 @@ type Redshift_Dialect
_ = statement
False

## PRIVATE
Specifies if the Database backend supports WITH clauses in nested queries.
supports_nested_with_clause : Boolean
supports_nested_with_clause self = True

## PRIVATE
supports_separate_nan : Boolean
supports_separate_nan self = True

## PRIVAITE
Specifies implementation details flags.
dialect_flags : Dialect_Flags
dialect_flags self -> Dialect_Flags =
rounding = Rounding_Flags.Value supports_negative_decimal_places=True supports_float_decimal_places=False use_builtin_bankers=False
primary_key = Primary_Key_Flags.Value allows_nulls=False
Dialect_Flags.Value rounding=rounding primary_key=primary_key

## PRIVATE
Specifies how the database creates temp tables.
temp_table_style : Temp_Table_Style
Expand Down Expand Up @@ -196,6 +179,20 @@ type Redshift_Dialect
_ = feature
True

## PRIVATE
Checks a dialect flag
flagged self flag:Dialect_Flag -> Boolean =
case flag of
Dialect_Flag.Supports_Negative_Decimal_Places -> True
Dialect_Flag.Supports_Float_Decimal_Places -> False
Dialect_Flag.Use_Builtin_Bankers -> False
Dialect_Flag.Primary_Key_Allows_Nulls -> False
## TODO: Check if Redshift supports NaN
Dialect_Flag.Supports_Separate_NaN -> False
## TODO: Check if Redshift supports WITH clauses in nested queries
Dialect_Flag.Supports_Nested_With_Clause -> True
Dialect_Flag.Supports_Case_Sensitive_Columns -> True

## PRIVATE
The default table types to use when listing tables.
default_table_types : Vector Text
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ type DB_Column
times_ten + product_a_b + 100
let : Text -> (DB_Column -> DB_Column) -> DB_Column
let self (name : Text) (callback : (DB_Column -> DB_Column)) -> DB_Column =
use_ctes = self.connection.dialect.supports_nested_with_clause
use_ctes = self.connection.dialect.flagged ..Supports_Nested_With_Clause

if use_ctes.not then callback self else
binder = self.connection.base_connection.table_naming_helper.generate_random_table_name
Expand Down Expand Up @@ -931,11 +931,11 @@ type DB_Column
should_use_builtin_round : Integer -> Boolean -> Boolean
should_use_builtin_round self decimal_places use_bankers =
# Don't use for banker's rounding (unless the dialect has a builtin for it)
bankers_ok = self.connection.dialect.dialect_flags.rounding.use_builtin_bankers || use_bankers.not
bankers_ok = self.connection.dialect.flagged ..Use_Builtin_Bankers || use_bankers.not
# Don't use for negative decimal places, if the backend doesn't support it
negative_dp_ok = decimal_places >= 0 || self.connection.dialect.dialect_flags.rounding.supports_negative_decimal_places
negative_dp_ok = decimal_places >= 0 || self.connection.dialect.flagged ..Supports_Negative_Decimal_Places
# Don't use for floating-point inputs if decimal_places != 0, for Postgres
dp_param_ok = decimal_places == 0 || self.value_type.is_floating_point.not || self.connection.dialect.dialect_flags.rounding.supports_float_decimal_places
dp_param_ok = decimal_places == 0 || self.value_type.is_floating_point.not || self.connection.dialect.flagged ..Supports_Float_Decimal_Places
bankers_ok && negative_dp_ok && dp_param_ok

## PRIVATE
Expand Down Expand Up @@ -1255,7 +1255,7 @@ type DB_Column
is_blank = case self_type.is_text of
True -> self.is_empty
False -> self.is_nothing
result = case treat_nans_as_blank && self_type.is_floating_point && self.connection.dialect.supports_separate_nan of
result = case treat_nans_as_blank && self_type.is_floating_point && self.connection.dialect.flagged ..Supports_Separate_NaN of
True -> is_blank || self.is_nan
False -> is_blank
result.rename new_name
Expand Down
28 changes: 7 additions & 21 deletions distribution/lib/Standard/Database/0.0.0-dev/src/Dialect.enso
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ import project.Internal.SQL_Type_Mapping.SQL_Type_Mapping
import project.Internal.SQL_Type_Reference.SQL_Type_Reference
import project.Internal.SQLite.SQLite_Dialect
import project.Internal.Statement_Setter.Statement_Setter
import project.Dialect_Flag.Dialect_Flag
import project.SQL.SQL_Builder
import project.SQL_Statement.SQL_Statement
import project.SQL_Type.SQL_Type
from project.Dialect_Flags import all
from project.Errors import SQL_Error, Unsupported_Database_Operation
from project.Feature import Feature
from project.Internal.JDBC_Connection import JDBC_Connection
Expand Down Expand Up @@ -139,26 +139,6 @@ type Dialect
_ = statement
Unimplemented.throw "This is an interface only."

## PRIVATE
Specifies if the Database backend supports WITH clauses in nested queries.
supports_nested_with_clause : Boolean
supports_nested_with_clause self =
Unimplemented.throw "This is an interface only."

## PRIVATE
Specifies if the Database distinguishes a separate `NaN` value for
floating point columns. Some databases will not be able to distinguish
NaN from NULL.
supports_separate_nan : Boolean
supports_separate_nan self =
Unimplemented.throw "This is an interface only."

## PRIVAITE
Specifies implementation details flags.
dialect_flags : Dialect_Flags
dialect_flags -> Dialect_Flags =
Unimplemented.throw "This is an interface only."

## PRIVATE
Specifies how the database creates temp tables.
temp_table_style : Temp_Table_Style
Expand Down Expand Up @@ -212,6 +192,12 @@ type Dialect
_ = feature
Unimplemented.throw "This is an interface only."

## PRIVATE
Checks a dialect flag
flagged self flag:Dialect_Flag -> Boolean =
_ = flag
Unimplemented.throw "This is an interface only."

## PRIVATE
Returns a helper for mapping database-specific SQL errors into our common
error types.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from Standard.Base import all

## PRIVATE
type Dialect_Flag
## PRIVATE
Supports_Negative_Decimal_Places
## PRIVATE
Supports_Float_Decimal_Places
## PRIVATE
Use_Builtin_Bankers
## PRIVATE
Primary_Key_Allows_Nulls
## PRIVATE
Specifies if the Database distinguishes a separate `NaN` value for
floating point columns. Some databases will not be able to distinguish
NaN from NULL.
Supports_Separate_NaN
## PRIVATE
Specifies if the Database backend supports WITH clauses in nested queries.
Supports_Nested_With_Clause
## PRIVATE
Specifies if the backend supports case-sensitive column names. If `False`, the backend will
match column names in a case insensitive way, so that "Foo" and "foo" will refer to the
same column.
Supports_Case_Sensitive_Columns

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ from Standard.Table.Aggregate_Column.Aggregate_Column import all
from Standard.Table.Errors import Inexact_Type_Coercion
from Standard.Table.Internal.Storage import get_storage_for_column

from Standard.Database.Dialect_Flags import all

import project.Connection.Connection.Connection
import project.DB_Column.DB_Column
import project.DB_Table.DB_Table
Expand All @@ -35,6 +33,7 @@ import project.Internal.Replace_Params.Replace_Params
import project.Internal.SQL_Type_Mapping.SQL_Type_Mapping
import project.Internal.SQL_Type_Reference.SQL_Type_Reference
import project.Internal.Statement_Setter.Statement_Setter
import project.Dialect_Flag.Dialect_Flag
import project.SQL.SQL_Builder
import project.SQL.SQL_Fragment
import project.SQL_Statement.SQL_Statement
Expand Down Expand Up @@ -169,23 +168,6 @@ type Postgres_Dialect
_ = statement
False

## PRIVATE
Specifies if the Database backend supports WITH clauses in nested queries.
supports_nested_with_clause : Boolean
supports_nested_with_clause self = True

## PRIVATE
supports_separate_nan : Boolean
supports_separate_nan self = True

## PRIVAITE
Specifies implementation details flags.
dialect_flags : Dialect_Flags
dialect_flags self -> Dialect_Flags =
rounding = Rounding_Flags.Value supports_negative_decimal_places=True supports_float_decimal_places=False use_builtin_bankers=False
primary_key = Primary_Key_Flags.Value allows_nulls=False
Dialect_Flags.Value rounding=rounding primary_key=primary_key

## PRIVATE
Specifies how the database creates temp tables.
temp_table_style : Temp_Table_Style
Expand Down Expand Up @@ -271,6 +253,18 @@ type Postgres_Dialect
_ = feature
True

## PRIVATE
Checks a dialect flag
flagged self flag:Dialect_Flag -> Boolean =
case flag of
Dialect_Flag.Supports_Negative_Decimal_Places -> True
Dialect_Flag.Supports_Float_Decimal_Places -> False
Dialect_Flag.Use_Builtin_Bankers -> False
Dialect_Flag.Primary_Key_Allows_Nulls -> False
Dialect_Flag.Supports_Separate_NaN -> True
Dialect_Flag.Supports_Nested_With_Clause -> True
Dialect_Flag.Supports_Case_Sensitive_Columns -> True

## PRIVATE
The default table types to use when listing tables.
default_table_types : Vector Text
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ import Standard.Table.Internal.Problem_Builder.Problem_Builder
from Standard.Table import Aggregate_Column, Value_Type
from Standard.Table.Aggregate_Column.Aggregate_Column import all

from Standard.Database.Dialect_Flags import all

import project.Connection.Connection.Connection
import project.DB_Column.DB_Column
import project.DB_Table.DB_Table
Expand All @@ -33,6 +31,7 @@ import project.Internal.SQL_Type_Reference.SQL_Type_Reference
import project.Internal.SQLite.SQLite_Error_Mapper.SQLite_Error_Mapper
import project.Internal.SQLite.SQLite_Type_Mapping.SQLite_Type_Mapping
import project.Internal.Statement_Setter.Statement_Setter
import project.Dialect_Flag.Dialect_Flag
import project.SQL.SQL_Builder
import project.SQL_Statement.SQL_Statement
import project.SQL_Type.SQL_Type
Expand Down Expand Up @@ -182,23 +181,6 @@ type SQLite_Dialect
_ = statement
True

## PRIVATE
Specifies if the Database backend supports WITH clauses in nested queries.
supports_nested_with_clause : Boolean
supports_nested_with_clause self = True

## PRIVATE
supports_separate_nan : Boolean
supports_separate_nan self = False

## PRIVAITE
Specifies implementation details flags.
dialect_flags : Dialect_Flags
dialect_flags self -> Dialect_Flags =
rounding = Rounding_Flags.Value supports_negative_decimal_places=False supports_float_decimal_places=True use_builtin_bankers=False
primary_key = Primary_Key_Flags.Value allows_nulls=True
Dialect_Flags.Value rounding=rounding primary_key=primary_key

## PRIVATE
Specifies how the database creates temp tables.
temp_table_style : Temp_Table_Style
Expand Down Expand Up @@ -282,6 +264,18 @@ type SQLite_Dialect
_ = feature
True

## PRIVATE
Checks a dialect flag
flagged self flag:Dialect_Flag -> Boolean =
case flag of
Dialect_Flag.Supports_Negative_Decimal_Places -> False
Dialect_Flag.Supports_Float_Decimal_Places -> True
Dialect_Flag.Use_Builtin_Bankers -> False
Dialect_Flag.Primary_Key_Allows_Nulls -> True
Dialect_Flag.Supports_Separate_NaN -> False
Dialect_Flag.Supports_Nested_With_Clause -> True
Dialect_Flag.Supports_Case_Sensitive_Columns -> False

## PRIVATE
The default table types to use when listing tables.
default_table_types : Vector Text
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ import Standard.Database.Internal.Replace_Params.Replace_Params
import Standard.Database.Internal.SQL_Type_Mapping.SQL_Type_Mapping
import Standard.Database.Internal.SQL_Type_Reference.SQL_Type_Reference
import Standard.Database.Internal.Statement_Setter.Statement_Setter
import Standard.Database.Dialect_Flag.Dialect_Flag
import Standard.Database.SQL.SQL_Builder
import Standard.Database.SQL.SQL_Fragment
import Standard.Database.SQL_Statement.SQL_Statement
import Standard.Database.SQL_Type.SQL_Type
from Standard.Database.Dialect import Temp_Table_Style
from Standard.Database.Dialect_Flags import all
from Standard.Database.Errors import SQL_Error, Unsupported_Database_Operation
from Standard.Database.Internal.Base_Generator import lift_binary_op
from Standard.Database.Internal.IR.Operation_Metadata import Date_Period_Metadata
Expand Down Expand Up @@ -181,23 +181,6 @@ type SQLServer_Dialect
_ = statement
False

## PRIVATE
Specifies if the Database backend supports WITH clauses in nested queries.
supports_nested_with_clause : Boolean
supports_nested_with_clause self = False

## PRIVATE
supports_separate_nan : Boolean
supports_separate_nan self = True

## PRIVAITE
Specifies implementation details flags.
dialect_flags : Dialect_Flags
dialect_flags self -> Dialect_Flags =
rounding = Rounding_Flags.Value supports_negative_decimal_places=True supports_float_decimal_places=True use_builtin_bankers=False
primary_key = Primary_Key_Flags.Value allows_nulls=False
Dialect_Flags.Value rounding=rounding primary_key=primary_key

## PRIVATE
Specifies how the database creates temp tables.
temp_table_style : Temp_Table_Style
Expand Down Expand Up @@ -246,6 +229,18 @@ type SQLServer_Dialect
Feature.Select_Columns -> True
_ -> False

## PRIVATE
Checks a dialect flag
flagged self flag:Dialect_Flag -> Boolean =
case flag of
Dialect_Flag.Supports_Negative_Decimal_Places -> True
Dialect_Flag.Supports_Float_Decimal_Places -> True
Dialect_Flag.Use_Builtin_Bankers -> False
Dialect_Flag.Primary_Key_Allows_Nulls -> False
Dialect_Flag.Supports_Separate_NaN -> False
Dialect_Flag.Supports_Nested_With_Clause -> True
Dialect_Flag.Supports_Case_Sensitive_Columns -> False

## PRIVATE
The default table types to use when listing tables.
default_table_types : Vector Text
Expand Down
Loading
Loading