class IndexTestModel(model.Model): __table__ = "IndexTestModel" key = field.Field(field.String, primary_key=True) value = field.Field(field.String) value_idx = index.Index(["value"], name="value") value_idx2 = index.Index( ["value"], name="value_desc", column_ordering={"value": False} )
class IndexTestModel(model.Model): __table__ = 'IndexTestModel' key = field.Field(field.String, primary_key=True) value = field.Field(field.String) value_index = index.Index(['value'])
def indexes(cls) -> Dict[str, Dict[str, Any]]: """Compiles index information from index and index columns schemas.""" # ordinal_position is the position of the column in the indicated index. # Results are ordered by that so the index columns are added in the # correct order. index_column_schemas = index_column.IndexColumnSchema.where( condition.equal_to('table_catalog', ''), condition.equal_to('table_schema', ''), condition.order_by(('ordinal_position', condition.OrderType.ASC)), ) index_columns = collections.defaultdict(list) storing_columns = collections.defaultdict(list) for schema in index_column_schemas: key = (schema.table_name, schema.index_name) if schema.ordinal_position is not None: index_columns[key].append(schema.column_name) else: storing_columns[key].append(schema.column_name) index_schemas = index_schema.IndexSchema.where( condition.equal_to('table_catalog', ''), condition.equal_to('table_schema', ''), ) indexes = collections.defaultdict(dict) for schema in index_schemas: key = (schema.table_name, schema.index_name) new_index = index.Index(index_columns[key], parent=schema.parent_table_name, null_filtered=schema.is_null_filtered, unique=schema.is_unique, storing_columns=storing_columns[key]) new_index.name = schema.index_name indexes[schema.table_name][schema.index_name] = new_index return indexes
def finalize(self) -> None: """Finish generating metadata state. Some metadata depends on having all configuration data set before it can be calculated--the primary index, for example, needs all fields to be added before it can be calculated. This method is called to indicate that all relevant state has been added and the calculation of the final data should now happen. """ if self._finalized: raise error.SpannerError('Metadata was already finalized') sorted_fields = list( sorted(self.fields.values(), key=lambda f: f.position)) if index.Index.PRIMARY_INDEX not in self.indexes: primary_keys = [f.name for f in sorted_fields if f.primary_key()] primary_index = index.Index(primary_keys) primary_index.name = index.Index.PRIMARY_INDEX self.indexes[index.Index.PRIMARY_INDEX] = primary_index self.primary_keys = self.indexes[index.Index.PRIMARY_INDEX].columns self.columns = [f.name for f in sorted_fields] for _, relation in self.relations.items(): relation.origin = self.model_class registry.model_registry().register(self.model_class) self._finalized = True
class SmallTestModel(model.Model): """Model class used for testing.""" __table__ = 'SmallTestModel' key = field.Field(field.String, primary_key=True) value_1 = field.Field(field.String) value_2 = field.Field(field.String, nullable=True) index_1 = index.Index(['value_1'])
class SmallTestParentModel(model.Model): """Model class used for testing.""" __table__ = "SmallTestParentModel" key = field.Field(field.String, primary_key=True) value_1 = field.Field(field.String) value_2 = field.Field(field.String, nullable=True) index_1 = index.Index(["value_1"]) children = relationship.Relationship( "spanner_orm.tests.models.ChildTestModel", {"key": "key"} )
class UnittestModel(model.Model): """Model class used for model testing.""" __table__ = 'table' int_ = field.Field(field.Integer, primary_key=True) int_2 = field.Field(field.Integer, nullable=True) string = field.Field(field.String, primary_key=True) string_2 = field.Field(field.String, nullable=True) timestamp = field.Field(field.Timestamp) string_array = field.Field(field.StringArray, nullable=True) test_index = index.Index(['string_2'])
class UnittestModel(model.Model): """Model class used for model testing.""" __table__ = "table" int_ = field.Field(field.Integer, primary_key=True) int_2 = field.Field(field.Integer, nullable=True) float_ = field.Field(field.Float, primary_key=True) float_2 = field.Field(field.Float, nullable=True) string = field.Field(field.String, primary_key=True) string_2 = field.Field(field.String, nullable=True) string_3 = field.Field(field.String, nullable=True, size=10) timestamp = field.Field(field.Timestamp) timestamp_2 = field.Field( field.Timestamp, nullable=True, allow_commit_timestamp=True ) date = field.Field(field.Date, nullable=True) bool_array = field.Field(field.BoolArray, nullable=True) int_array = field.Field(field.IntegerArray, nullable=True) float_array = field.Field(field.FloatArray, nullable=True) date_array = field.Field(field.DateArray, nullable=True) string_array = field.Field(field.StringArray, nullable=True) string_array_2 = field.Field(field.StringArray, nullable=True, size=50) test_index = index.Index(["string_2"])