logic for indexes now using native driver and metadata

This commit is contained in:
Jon Haddad
2014-06-16 19:24:46 -07:00
parent a5b4535a8c
commit e4a763ceb3

View File

@@ -88,7 +88,8 @@ def sync_table(model, create_missing_keyspace=True):
cluster = get_cluster()
tables = cluster.metadata.keyspaces[ks_name].tables
keyspace = cluster.metadata.keyspaces[ks_name]
tables = keyspace.tables
#check for an existing column family
if raw_cf_name not in tables:
@@ -117,31 +118,19 @@ def sync_table(model, create_missing_keyspace=True):
update_compaction(model)
#get existing index names, skip ones that already exist
with connection_manager() as con:
_, idx_names = con.execute(
"SELECT index_name from system.\"IndexInfo\" WHERE table_name=:table_name",
{'table_name': raw_cf_name},
ONE
)
idx_names = [i[0] for i in idx_names]
idx_names = filter(None, idx_names)
table = cluster.metadata.keyspaces[ks_name].tables[raw_cf_name]
indexes = [c for n,c in model._columns.items() if c.index]
if indexes:
for column in indexes:
if column.db_index_name in idx_names: continue
qs = ['CREATE INDEX index_{}_{}'.format(raw_cf_name, column.db_field_name)]
qs += ['ON {}'.format(cf_name)]
qs += ['("{}")'.format(column.db_field_name)]
qs = ' '.join(qs)
try:
execute(qs)
except CQLEngineException:
# index already exists
pass
for column in indexes:
if table.columns[column.db_field_name].index:
continue
qs = ['CREATE INDEX index_{}_{}'.format(raw_cf_name, column.db_field_name)]
qs += ['ON {}'.format(cf_name)]
qs += ['("{}")'.format(column.db_field_name)]
qs = ' '.join(qs)
execute_native(qs)
def get_create_table(model):
cf_name = model.column_family_name()