Пример #1
0
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}
    )
Пример #2
0
class IndexTestModel(model.Model):
    __table__ = 'IndexTestModel'

    key = field.Field(field.String, primary_key=True)
    value = field.Field(field.String)

    value_index = index.Index(['value'])
Пример #3
0
    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
Пример #4
0
    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
Пример #5
0
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'])
Пример #6
0
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"}
    )
Пример #7
0
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'])
Пример #8
0
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"])