Beispiel #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}
    )
class IndexTestModel(model.Model):
    __table__ = 'IndexTestModel'

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

    value_index = index.Index(['value'])
Beispiel #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
Beispiel #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
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'])
Beispiel #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"}
    )
Beispiel #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'])
Beispiel #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"])