diff --git a/packages/php-datatypes/src/Definition/Bigquery.php b/packages/php-datatypes/src/Definition/Bigquery.php index 8dd11a962..cb482476a 100644 --- a/packages/php-datatypes/src/Definition/Bigquery.php +++ b/packages/php-datatypes/src/Definition/Bigquery.php @@ -328,4 +328,31 @@ private function validateNumericScaleAndPrecision(string $length, int $decimalLe return false; } + + /** + * {@inheritDoc} + */ + public static function getTypesAllowedInFilters(): array + { + return [ + self::TYPE_BOOL, + self::TYPE_DATE, + self::TYPE_DATETIME, + self::TYPE_TIME, + self::TYPE_TIMESTAMP, + self::TYPE_INT64, + self::TYPE_INT, + self::TYPE_SMALLINT, + self::TYPE_INTEGER, + self::TYPE_BIGINT, + self::TYPE_TINYINT, + self::TYPE_BYTEINT, + self::TYPE_NUMERIC, + self::TYPE_DECIMAL, + self::TYPE_BIGNUMERIC, + self::TYPE_BIGDECIMAL, + self::TYPE_FLOAT64, + self::TYPE_STRING, + ]; + } } diff --git a/packages/php-datatypes/src/Definition/DefinitionInterface.php b/packages/php-datatypes/src/Definition/DefinitionInterface.php index d328cb3dc..262e76d1a 100644 --- a/packages/php-datatypes/src/Definition/DefinitionInterface.php +++ b/packages/php-datatypes/src/Definition/DefinitionInterface.php @@ -15,5 +15,10 @@ public function toArray(): array; public function getBasetype(): string; + /** + * @return string[] + */ + public static function getTypesAllowedInFilters(): array; + public static function getTypeByBasetype(string $basetype): string; } diff --git a/packages/php-datatypes/src/Definition/Exasol.php b/packages/php-datatypes/src/Definition/Exasol.php index e7f60bf88..93daacd85 100644 --- a/packages/php-datatypes/src/Definition/Exasol.php +++ b/packages/php-datatypes/src/Definition/Exasol.php @@ -437,4 +437,45 @@ public static function getTypeByBasetype(string $basetype): string throw new LogicException(sprintf('Definition for base type "%s" is missing.', $basetype)); } + + /** + * {@inheritDoc} + */ + public static function getTypesAllowedInFilters(): array + { + return [ + self::TYPE_DECIMAL, + self::TYPE_DOUBLE_PRECISION, + self::TYPE_BOOLEAN, + self::TYPE_DATE, + self::TYPE_TIMESTAMP, + self::TYPE_TIMESTAMP_WITH_LOCAL_ZONE, + self::TYPE_INTERVAL_YEAR_TO_MONTH, + self::TYPE_INTERVAL_DAY_TO_SECOND, + self::TYPE_CHAR, + self::TYPE_VARCHAR, + self::TYPE_BIGINT, + self::TYPE_INT, + self::TYPE_INTEGER, + self::TYPE_SHORTINT, + self::TYPE_SMALLINT, + self::TYPE_TINYINT, + self::TYPE_BOOL, + self::TYPE_CHAR_VARYING, + self::TYPE_CHARACTER, + self::TYPE_CHARACTER_LARGE_OBJECT, + self::TYPE_CHARACTER_VARYING, + self::TYPE_DEC, + self::TYPE_LONG_VARCHAR, + self::TYPE_NCHAR, + self::TYPE_NUMBER, + self::TYPE_NUMERIC, + self::TYPE_NVARCHAR, + self::TYPE_NVARCHAR2, + self::TYPE_VARCHAR2, + self::TYPE_DOUBLE, + self::TYPE_FLOAT, + self::TYPE_REAL, + ]; + } } diff --git a/packages/php-datatypes/src/Definition/GenericStorage.php b/packages/php-datatypes/src/Definition/GenericStorage.php index 65b8f9a47..9227ce65d 100644 --- a/packages/php-datatypes/src/Definition/GenericStorage.php +++ b/packages/php-datatypes/src/Definition/GenericStorage.php @@ -137,4 +137,12 @@ public static function getTypeByBasetype(string $basetype): string { throw new LogicException('Method is not implemented yet.'); } + + /** + * {@inheritDoc} + */ + public static function getTypesAllowedInFilters(): array + { + return []; + } } diff --git a/packages/php-datatypes/src/Definition/MySQL.php b/packages/php-datatypes/src/Definition/MySQL.php index 321829348..4e3e77070 100644 --- a/packages/php-datatypes/src/Definition/MySQL.php +++ b/packages/php-datatypes/src/Definition/MySQL.php @@ -307,4 +307,12 @@ public static function getTypeByBasetype(string $basetype): string { throw new LogicException('Method is not implemented yet.'); } + + /** + * {@inheritDoc} + */ + public static function getTypesAllowedInFilters(): array + { + return []; + } } diff --git a/packages/php-datatypes/src/Definition/Redshift.php b/packages/php-datatypes/src/Definition/Redshift.php index fcce5d847..2ea4efec4 100644 --- a/packages/php-datatypes/src/Definition/Redshift.php +++ b/packages/php-datatypes/src/Definition/Redshift.php @@ -12,16 +12,46 @@ class Redshift extends Common { + public const SMALLINT = 'SMALLINT'; + public const INT2 = 'INT2'; + public const INTEGER = 'INTEGER'; + public const INT = 'INT'; + public const INT4 = 'INT4'; + public const BIGINT = 'BIGINT'; + public const INT8 = 'INT8'; + public const DECIMAL = 'DECIMAL'; + public const NUMERIC = 'NUMERIC'; + public const REAL = 'REAL'; + public const FLOAT4 = 'FLOAT4'; + public const DOUBLE_PRECISION = 'DOUBLE PRECISION'; + public const FLOAT8 = 'FLOAT8'; + public const FLOAT = 'FLOAT'; + public const BOOLEAN = 'BOOLEAN'; + public const BOOL = 'BOOL'; + public const CHAR = 'CHAR'; + public const CHARACTER = 'CHARACTER'; + public const NCHAR = 'NCHAR'; + public const BPCHAR = 'BPCHAR'; + public const VARCHAR = 'VARCHAR'; + public const CHARACTER_VARYING = 'CHARACTER VARYING'; + public const NVARCHAR = 'NVARCHAR'; + public const TEXT = 'TEXT'; + public const DATE = 'DATE'; + public const TIMESTAMP = 'TIMESTAMP'; + public const TIMESTAMP_WITHOUT_TIME_ZONE = 'TIMESTAMP WITHOUT TIME ZONE'; + public const TIMESTAMPTZ = 'TIMESTAMPTZ'; + public const TIMESTAMP_WITH_TIME_ZONE = 'TIMESTAMP WITH TIME ZONE'; + public const TYPES = [ - 'SMALLINT', 'INT2', 'INTEGER', 'INT', 'INT4', 'BIGINT', 'INT8', - 'DECIMAL', 'NUMERIC', - 'REAL', 'FLOAT4', 'DOUBLE PRECISION', 'FLOAT8', 'FLOAT', - 'BOOLEAN', 'BOOL', - 'CHAR', 'CHARACTER', 'NCHAR', 'BPCHAR', - 'VARCHAR', 'CHARACTER VARYING', 'NVARCHAR', 'TEXT', - 'DATE', - 'TIMESTAMP', 'TIMESTAMP WITHOUT TIME ZONE', - 'TIMESTAMPTZ', 'TIMESTAMP WITH TIME ZONE', + self::SMALLINT, self::INT2, self::INTEGER, self::INT, self::INT4, self::BIGINT, self::INT8, + self::DECIMAL, self::NUMERIC, + self::REAL, self::FLOAT4, self::DOUBLE_PRECISION, self::FLOAT8, self::FLOAT, + self::BOOLEAN, self::BOOL, + self::CHAR, self::CHARACTER, self::NCHAR, self::BPCHAR, + self::VARCHAR, self::CHARACTER_VARYING, self::NVARCHAR, self::TEXT, + self::DATE, + self::TIMESTAMP, self::TIMESTAMP_WITHOUT_TIME_ZONE, + self::TIMESTAMPTZ, self::TIMESTAMP_WITH_TIME_ZONE, ]; protected ?string $compression = null; @@ -145,8 +175,8 @@ private function validateLength(string $type, $length = null): void { $valid = true; switch (strtoupper($type)) { - case 'DECIMAL': - case 'NUMERIC': + case self::DECIMAL: + case self::NUMERIC: if (is_null($length) || $length === '') { break; } @@ -172,10 +202,10 @@ private function validateLength(string $type, $length = null): void break; } break; - case 'VARCHAR': - case 'CHARACTER VARYING': - case 'TEXT': - case 'NVARCHAR': + case self::VARCHAR: + case self::CHARACTER_VARYING: + case self::TEXT: + case self::NVARCHAR: if (is_null($length) || $length === '') { break; } @@ -188,10 +218,10 @@ private function validateLength(string $type, $length = null): void break; } break; - case 'CHAR': - case 'CHARACTER': - case 'NCHAR': - case 'BPCHAR': + case self::CHAR: + case self::CHARACTER: + case self::NCHAR: + case self::BPCHAR: if (is_null($length)) { break; } @@ -204,10 +234,10 @@ private function validateLength(string $type, $length = null): void break; } break; - case 'TIMESTAMP': - case 'TIMESTAMP WITHOUT TIME ZONE': - case 'TIMESTAMPTZ': - case 'TIMESTAMP WITH TIME ZONE': + case self::TIMESTAMP: + case self::TIMESTAMP_WITHOUT_TIME_ZONE: + case self::TIMESTAMPTZ: + case self::TIMESTAMP_WITH_TIME_ZONE: if (is_null($length) || $length === '') { break; } @@ -247,81 +277,97 @@ private function validateCompression(string $type, string $compression): void case '': break; case 'BYTEDICT': - if (in_array($type, ['BOOLEAN', 'BOOL'])) { + if (in_array($type, [self::BOOLEAN, self::BOOL])) { $valid = false; } break; case 'DELTA': if (!in_array($type, [ - 'SMALLINT', - 'INT2', - 'INT', - 'INTEGER', - 'INT4', - 'BIGINT', - 'INT8', - 'DATE', - 'TIMESTAMP', - 'TIMESTAMP WITHOUT TIME ZONE', - 'TIMESTAMPTZ', - 'TIMESTAMP WITH TIMEZONE', - 'DECIMAL', - 'NUMERIC', + self::SMALLINT, + self::INT2, + self::INT, + self::INTEGER, + self::INT4, + self::BIGINT, + self::INT8, + self::DATE, + self::TIMESTAMP, + self::TIMESTAMP_WITHOUT_TIME_ZONE, + self::TIMESTAMPTZ, + self::TIMESTAMP_WITH_TIME_ZONE, + self::DECIMAL, + self::NUMERIC, ])) { $valid = false; } break; case 'DELTA32K': if (!in_array($type, [ - 'INT', - 'INTEGER', - 'INT4', - 'BIGINT', - 'INT8', - 'DATE', - 'TIMESTAMP', - 'TIMESTAMP WITHOUT TIME ZONE', - 'TIMESTAMPTZ', - 'TIMESTAMP WITH TIMEZONE', - 'DECIMAL', - 'NUMERIC', + self::INT, + self::INTEGER, + self::INT4, + self::BIGINT, + self::INT8, + self::DATE, + self::TIMESTAMP, + self::TIMESTAMP_WITHOUT_TIME_ZONE, + self::TIMESTAMPTZ, + self::TIMESTAMP_WITH_TIME_ZONE, + self::DECIMAL, + self::NUMERIC, ])) { $valid = false; } break; case 'LZO': - if (in_array($type, ['BOOLEAN', 'BOOL', 'REAL', 'FLOAT4', 'DOUBLE PRECISION', 'FLOAT8', 'FLOAT'])) { + if (in_array($type, [ + self::BOOLEAN, + self::BOOL, + self::REAL, + self::FLOAT4, + self::DOUBLE_PRECISION, + self::FLOAT8, + self::FLOAT, + ])) { $valid = false; } break; case 'MOSTLY8': if (!in_array($type, [ - 'SMALLINT', - 'INT2', - 'INT', - 'INTEGER', - 'INT4', - 'BIGINT', - 'INT8', - 'DECIMAL', - 'NUMERIC', + self::SMALLINT, + self::INT2, + self::INT, + self::INTEGER, + self::INT4, + self::BIGINT, + self::INT8, + self::DECIMAL, + self::NUMERIC, ])) { $valid = false; } break; case 'MOSTLY16': - if (!in_array($type, ['INT', 'INTEGER', 'INT4', 'BIGINT', 'INT8', 'DECIMAL', 'NUMERIC'])) { + if (!in_array($type, [ + self::INT, + self::INTEGER, + self::INT4, + self::BIGINT, + self::INT8, + self::DECIMAL, + self::NUMERIC, + ])) { $valid = false; } break; case 'MOSTLY32': - if (!in_array($type, ['BIGINT', 'INT8', 'DECIMAL', 'NUMERIC'])) { + if (!in_array($type, [self::BIGINT, self::INT8, self::DECIMAL, self::NUMERIC])) { $valid = false; } break; case 'TEXT255': case 'TEXT32K': - if (!in_array($type, ['VARCHAR', 'CHARACTER VARYING', 'NVARCHAR', 'TEXT'])) { + if (!in_array($type, [self::VARCHAR, self::CHARACTER_VARYING, self::NVARCHAR, self::TEXT])) { $valid = false; } break; @@ -337,37 +383,37 @@ private function validateCompression(string $type, string $compression): void public function getBasetype(): string { switch (strtoupper($this->type)) { - case 'SMALLINT': - case 'INT2': - case 'INTEGER': - case 'INT': - case 'INT4': - case 'BIGINT': - case 'INT8': + case self::SMALLINT: + case self::INT2: + case self::INTEGER: + case self::INT: + case self::INT4: + case self::BIGINT: + case self::INT8: $basetype = BaseType::INTEGER; break; - case 'DECIMAL': - case 'NUMERIC': + case self::DECIMAL: + case self::NUMERIC: $basetype = BaseType::NUMERIC; break; - case 'REAL': - case 'FLOAT4': - case 'DOUBLE PRECISION': - case 'FLOAT8': - case 'FLOAT': + case self::REAL: + case self::FLOAT4: + case self::DOUBLE_PRECISION: + case self::FLOAT8: + case self::FLOAT: $basetype = BaseType::FLOAT; break; - case 'BOOLEAN': - case 'BOOL': + case self::BOOLEAN: + case self::BOOL: $basetype = BaseType::BOOLEAN; break; - case 'DATE': + case self::DATE: $basetype = BaseType::DATE; break; - case 'TIMESTAMP': - case 'TIMESTAMP WITHOUT TIME ZONE': - case 'TIMESTAMPTZ': - case 'TIMESTAMP WITH TIME ZONE': + case self::TIMESTAMP: + case self::TIMESTAMP_WITHOUT_TIME_ZONE: + case self::TIMESTAMPTZ: + case self::TIMESTAMP_WITH_TIME_ZONE: $basetype = BaseType::TIMESTAMP; break; default: @@ -396,4 +442,42 @@ public function toMetadata(): array } return $metadata; } + + /** + * {@inheritDoc} + */ + public static function getTypesAllowedInFilters(): array + { + return [ + self::SMALLINT, + self::INT2, + self::INTEGER, + self::INT, + self::INT4, + self::BIGINT, + self::INT8, + self::DECIMAL, + self::NUMERIC, + self::REAL, + self::FLOAT4, + self::DOUBLE_PRECISION, + self::FLOAT8, + self::FLOAT, + self::BOOLEAN, + self::BOOL, + self::CHAR, + self::CHARACTER, + self::NCHAR, + self::BPCHAR, + self::VARCHAR, + self::CHARACTER_VARYING, + self::NVARCHAR, + self::TEXT, + self::DATE, + self::TIMESTAMP, + self::TIMESTAMP_WITHOUT_TIME_ZONE, + self::TIMESTAMPTZ, + self::TIMESTAMP_WITH_TIME_ZONE, + ]; + } } diff --git a/packages/php-datatypes/src/Definition/Snowflake.php b/packages/php-datatypes/src/Definition/Snowflake.php index 934ff4456..6fa2cad5b 100644 --- a/packages/php-datatypes/src/Definition/Snowflake.php +++ b/packages/php-datatypes/src/Definition/Snowflake.php @@ -374,4 +374,41 @@ public static function getTypeByBasetype(string $basetype): string throw new LogicException(sprintf('Definition for base type "%s" is missing.', $basetype)); } + + /** + * {@inheritDoc} + */ + public static function getTypesAllowedInFilters(): array + { + return [ + self::TYPE_NUMBER, + self::TYPE_DECIMAL, + self::TYPE_NUMERIC, + self::TYPE_INT, + self::TYPE_INTEGER, + self::TYPE_BIGINT, + self::TYPE_SMALLINT, + self::TYPE_TINYINT, + self::TYPE_BYTEINT, + self::TYPE_FLOAT, + self::TYPE_FLOAT4, + self::TYPE_FLOAT8, + self::TYPE_DOUBLE, + self::TYPE_DOUBLE_PRECISION, + self::TYPE_REAL, + self::TYPE_VARCHAR, + self::TYPE_CHAR, + self::TYPE_CHARACTER, + self::TYPE_STRING, + self::TYPE_TEXT, + self::TYPE_BOOLEAN, + self::TYPE_DATE, + self::TYPE_DATETIME, + self::TYPE_TIME, + self::TYPE_TIMESTAMP, + self::TYPE_TIMESTAMP_NTZ, + self::TYPE_TIMESTAMP_LTZ, + self::TYPE_TIMESTAMP_TZ, + ]; + } } diff --git a/packages/php-datatypes/src/Definition/Synapse.php b/packages/php-datatypes/src/Definition/Synapse.php index 8a7e1bea4..42e2307c6 100644 --- a/packages/php-datatypes/src/Definition/Synapse.php +++ b/packages/php-datatypes/src/Definition/Synapse.php @@ -301,4 +301,35 @@ public static function getTypeByBasetype(string $basetype): string throw new LogicException(sprintf('Definition for base type "%s" is missing.', $basetype)); } + + /** + * {@inheritDoc} + */ + public static function getTypesAllowedInFilters(): array + { + return [ + self::TYPE_DECIMAL, + self::TYPE_NUMERIC, + self::TYPE_FLOAT, + self::TYPE_REAL, + self::TYPE_MONEY, + self::TYPE_SMALLMONEY, + self::TYPE_BIGINT, + self::TYPE_INT, + self::TYPE_SMALLINT, + self::TYPE_TINYINT, + self::TYPE_BIT, + self::TYPE_NVARCHAR, + self::TYPE_NCHAR, + self::TYPE_VARCHAR, + self::TYPE_CHAR, + self::TYPE_UNIQUEIDENTIFIER, + self::TYPE_DATETIMEOFFSET, + self::TYPE_DATETIME2, + self::TYPE_DATETIME, + self::TYPE_SMALLDATETIME, + self::TYPE_DATE, + self::TYPE_TIME, + ]; + } } diff --git a/packages/php-datatypes/src/Definition/Teradata.php b/packages/php-datatypes/src/Definition/Teradata.php index dc8159cbd..84cf6e3aa 100644 --- a/packages/php-datatypes/src/Definition/Teradata.php +++ b/packages/php-datatypes/src/Definition/Teradata.php @@ -702,4 +702,36 @@ public static function getTypeByBasetype(string $basetype): string throw new LogicException(sprintf('Definition for base type "%s" is missing.', $basetype)); } + + /** + * {@inheritDoc} + */ + public static function getTypesAllowedInFilters(): array + { + return [ + self::TYPE_BYTEINT, + self::TYPE_BIGINT, + self::TYPE_SMALLINT, + self::TYPE_INTEGER, + self::TYPE_INT, + self::TYPE_DECIMAL, + self::TYPE_NUMERIC, + self::TYPE_DEC, + self::TYPE_FLOAT, + self::TYPE_DOUBLE_PRECISION, + self::TYPE_REAL, + self::TYPE_NUMBER, + self::TYPE_DATE, + self::TYPE_TIME, + self::TYPE_TIMESTAMP, + self::TYPE_TIME_WITH_ZONE, + self::TYPE_TIMESTAMP_WITH_ZONE, + self::TYPE_CHAR, + self::TYPE_CHARACTER, + self::TYPE_VARCHAR, + self::TYPE_CHARV, + self::TYPE_CHARACTERV, + self::TYPE_LONG_VARCHAR, + ]; + } }