mirror of
https://github.com/Infinidat/infi.clickhouse_orm.git
synced 2024-11-25 02:03:46 +03:00
Drying get_sql methods
Some updates to Nullable documentation
This commit is contained in:
parent
3ba44608f3
commit
bcc4c29d10
|
@ -121,8 +121,7 @@ db.select('SELECT * FROM $db.event', model_class=Event)
|
|||
|
||||
Working with nullable fields
|
||||
----------------------------
|
||||
From [some time](https://github.com/yandex/ClickHouse/pull/70) ClickHouse provides a NULL value support.
|
||||
Also see some information [here](https://github.com/yandex/ClickHouse/blob/master/dbms/tests/queries/0_stateless/00395_nullable.sql).
|
||||
[ClickHouse provides a NULL value support](https://clickhouse.yandex/docs/en/data_types/nullable).
|
||||
|
||||
Wrapping another field in a `NullableField` makes it possible to assign `None` to that field. For example:
|
||||
|
||||
|
@ -148,6 +147,8 @@ to `None`.
|
|||
|
||||
NOTE: `ArrayField` of `NullableField` is not supported. Also `EnumField` cannot be nullable.
|
||||
|
||||
NOTE: Using `Nullable` almost always negatively affects performance, keep this in mind when designing your databases.
|
||||
|
||||
Working with field compression codecs
|
||||
-------------------------------------
|
||||
Besides default data compression, defined in server settings, per-field specification is also available.
|
||||
|
|
|
@ -76,15 +76,20 @@ class Field(object):
|
|||
'''
|
||||
sql = self.db_type
|
||||
if with_default_expression:
|
||||
if self.alias:
|
||||
sql += ' ALIAS %s' % self.alias
|
||||
elif self.materialized:
|
||||
sql += ' MATERIALIZED %s' % self.materialized
|
||||
else:
|
||||
default = self.to_db_string(self.default)
|
||||
sql += ' DEFAULT %s' % default
|
||||
if self.codec and db and db.has_codec_support:
|
||||
sql+= ' CODEC(%s)' % self.codec
|
||||
sql += self._extra_params(db)
|
||||
return sql
|
||||
|
||||
def _extra_params(self, db):
|
||||
sql = ''
|
||||
if self.alias:
|
||||
sql += ' ALIAS %s' % self.alias
|
||||
elif self.materialized:
|
||||
sql += ' MATERIALIZED %s' % self.materialized
|
||||
elif self.default:
|
||||
default = self.to_db_string(self.default)
|
||||
sql += ' DEFAULT %s' % default
|
||||
if self.codec and db and db.has_codec_support:
|
||||
sql += ' CODEC(%s)' % self.codec
|
||||
return sql
|
||||
|
||||
def isinstance(self, types):
|
||||
|
@ -511,15 +516,7 @@ class NullableField(Field):
|
|||
def get_sql(self, with_default_expression=True, db=None):
|
||||
sql = 'Nullable(%s)' % self.inner_field.get_sql(with_default_expression=False, db=db)
|
||||
if with_default_expression:
|
||||
if self.alias:
|
||||
sql += ' ALIAS %s' % self.alias
|
||||
elif self.materialized:
|
||||
sql += ' MATERIALIZED %s' % self.materialized
|
||||
elif self.default:
|
||||
default = self.to_db_string(self.default)
|
||||
sql += ' DEFAULT %s' % default
|
||||
if self.codec and db and db.has_codec_support:
|
||||
sql+= ' CODEC(%s)' % self.codec
|
||||
sql += self._extra_params(db)
|
||||
return sql
|
||||
|
||||
|
||||
|
@ -549,13 +546,5 @@ class LowCardinalityField(Field):
|
|||
sql = self.inner_field.get_sql(with_default_expression=False)
|
||||
logger.warning('LowCardinalityField not supported on clickhouse-server version < 19.0 using {} as fallback'.format(self.inner_field.__class__.__name__))
|
||||
if with_default_expression:
|
||||
if self.alias:
|
||||
sql += ' ALIAS %s' % self.alias
|
||||
elif self.materialized:
|
||||
sql += ' MATERIALIZED %s' % self.materialized
|
||||
elif self.default:
|
||||
default = self.to_db_string(self.default)
|
||||
sql += ' DEFAULT %s' % default
|
||||
if self.codec and db and db.has_codec_support:
|
||||
sql+= ' CODEC(%s)' % self.codec
|
||||
sql += self._extra_params(db)
|
||||
return sql
|
||||
|
|
Loading…
Reference in New Issue
Block a user