RAMEN-208 Support codec compression for clickhouse

This commit is contained in:
Roy Belio 2019-06-24 12:31:19 +03:00
parent 1889ac6372
commit 2d3441b127
4 changed files with 14 additions and 12 deletions

View File

@ -120,7 +120,7 @@ class Database(object):
self.server_version = self._get_server_version() self.server_version = self._get_server_version()
# Versions 1.1.53981 and below don't have timezone function # Versions 1.1.53981 and below don't have timezone function
self.server_timezone = self._get_server_timezone() if self.server_version > (1, 1, 53981) else pytz.utc self.server_timezone = self._get_server_timezone() if self.server_version > (1, 1, 53981) else pytz.utc
# Versions 19.1.16 and below don't support codec compression # Versions 19.1.16 and above support codec compression
self.has_codec_support = self.server_version >= (19, 1, 16) self.has_codec_support = self.server_version >= (19, 1, 16)
def create_database(self): def create_database(self):

View File

@ -453,8 +453,8 @@ class ArrayField(Field):
return '[' + comma_join(array) + ']' return '[' + comma_join(array) + ']'
def get_sql(self, with_default_expression=True, db=None): def get_sql(self, with_default_expression=True, db=None):
sql = 'Array(%s)' % self.inner_field.get_sql(with_default_expression=False) sql = 'Array(%s)' % self.inner_field.get_sql(with_default_expression=False, db=db)
if self.codec and db and db.has_codec_support: if with_default_expression and self.codec and db and db.has_codec_support:
sql+= ' CODEC(%s)' % self.codec sql+= ' CODEC(%s)' % self.codec
return sql return sql
@ -508,7 +508,7 @@ class NullableField(Field):
return self.inner_field.to_db_string(value, quote=quote) return self.inner_field.to_db_string(value, quote=quote)
def get_sql(self, with_default_expression=True, db=None): def get_sql(self, with_default_expression=True, db=None):
sql = 'Nullable(%s)' % self.inner_field.get_sql(with_default_expression=False) sql = 'Nullable(%s)' % self.inner_field.get_sql(with_default_expression=False, db=db)
if with_default_expression: if with_default_expression:
if self.alias: if self.alias:
sql += ' ALIAS %s' % self.alias sql += ' ALIAS %s' % self.alias

View File

@ -2,5 +2,5 @@ from infi.clickhouse_orm import migrations
from ..test_migrations import * from ..test_migrations import *
operations = [ operations = [
migrations.AlterTableWithBuffer(Model4_compressed) migrations.AlterTable(Model4_compressed),
] ]

View File

@ -94,6 +94,8 @@ class MigrationsTestCase(unittest.TestCase):
self.assertTrue(self.tableExists(AliasModel1)) self.assertTrue(self.tableExists(AliasModel1))
self.assertEqual(self.getTableFields(AliasModel1), self.assertEqual(self.getTableFields(AliasModel1),
[('date', 'Date'), ('int_field', 'Int8'), ('date_alias', 'Date'), ('int_field_plus_one', 'Int8')]) [('date', 'Date'), ('int_field', 'Int8'), ('date_alias', 'Date'), ('int_field_plus_one', 'Int8')])
self.database.migrate('tests.sample_migrations', 15)
self.assertTrue(self.tableExists(Model4_compressed))
# Several different models with the same table name, to simulate a table that changes over time # Several different models with the same table name, to simulate a table that changes over time
@ -259,7 +261,7 @@ class Model4Buffer_changed(BufferModel, Model4_changed):
class Model4_compressed(Model): class Model4_compressed(Model):
date = DateField(codec='Delta(4),ZSTD') date = DateField()
f3 = DateTimeField(codec='Delta,ZSTD(10)') f3 = DateTimeField(codec='Delta,ZSTD(10)')
f2 = StringField(codec='LZ4HC') f2 = StringField(codec='LZ4HC')