def test_table_overrides_metadata_create(self, connection):
        metadata = self.metadata
        Sequence("s1", metadata=metadata)
        s2 = Sequence("s2", metadata=metadata)
        s3 = Sequence("s3")
        t = Table("t", metadata, Column("c", Integer, s3, primary_key=True))
        assert s3.metadata is metadata

        t.create(connection, checkfirst=True)
        s3.drop(connection)

        # 't' is created, and 's3' won't be
        # re-created since it's linked to 't'.
        # 's1' and 's2' are, however.
        metadata.create_all(connection)
        assert self._has_sequence(connection, "s1")
        assert self._has_sequence(connection, "s2")
        assert not self._has_sequence(connection, "s3")

        s2.drop(connection)
        assert self._has_sequence(connection, "s1")
        assert not self._has_sequence(connection, "s2")

        metadata.drop_all(connection)
        assert not self._has_sequence(connection, "s1")
        assert not self._has_sequence(connection, "s2")
Пример #2
0
    def test_path_registry(self):
        metadata = MetaData()
        a = Table(
            "a",
            metadata,
            Column("id", Integer, primary_key=True),
            Column("foo", Integer),
            Column("bar", Integer),
        )
        b = Table(
            "b",
            metadata,
            Column("id", Integer, primary_key=True),
            Column("a_id", ForeignKey("a.id")),
        )
        m1 = mapper(A, a, properties={"bs": relationship(B)})
        mapper(B, b)

        @profile_memory()
        def go():
            ma = sa.inspect(aliased(A))
            m1._path_registry[m1.attrs.bs][ma][m1.attrs.bar]

        go()
        clear_mappers()
    def define_tables(cls, metadata):
        Table(
            "left",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("data", String(30)),
        )

        Table(
            "right",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("data", String(30)),
        )

        Table(
            "secondary",
            metadata,
            Column("left_id", Integer, ForeignKey("left.id"),
                   primary_key=True),
            Column("right_id",
                   Integer,
                   ForeignKey("right.id"),
                   primary_key=True),
        )
Пример #4
0
    def define_tables(cls, metadata):
        t2 = Table("t2", metadata, Column("nextid", Integer))

        Table(
            "t1",
            metadata,
            Column(
                "id",
                Integer,
                primary_key=True,
                default=sa.select([func.max(t2.c.nextid)]).as_scalar(),
            ),
            Column("data", String(30)),
        )

        Table(
            "date_table",
            metadata,
            Column(
                "date_id",
                DateTime,
                default=text("current_timestamp"),
                primary_key=True,
            ),
        )
Пример #5
0
    def test_no_embed_in_sql(self):
        """Using a DefaultGenerator, Sequence, DefaultClause
        in the columns, where clause of a select, or in the values
        clause of insert, update, raises an informative error"""

        t = Table(
            "some_table",
            MetaData(),
            Column("id", Integer),
            Column("col4", String()),
        )
        for const in (
                sa.Sequence("y"),
                sa.ColumnDefault("y"),
                sa.DefaultClause("y"),
        ):
            assert_raises_message(
                sa.exc.ArgumentError,
                "SQL expression object expected, got object of type "
                "<.* 'list'> instead",
                t.select,
                [const],
            )
            assert_raises_message(
                sa.exc.InvalidRequestError,
                "cannot be used directly as a column expression.",
                str,
                t.insert().values(col4=const),
            )
            assert_raises_message(
                sa.exc.InvalidRequestError,
                "cannot be used directly as a column expression.",
                str,
                t.update().values(col4=const),
            )
Пример #6
0
    def test_many_discarded_relationships(self):
        """a use case that really isn't supported, nonetheless we can
        guard against memleaks here so why not"""

        m1 = MetaData()
        t1 = Table("t1", m1, Column("id", Integer, primary_key=True))
        t2 = Table(
            "t2",
            m1,
            Column("id", Integer, primary_key=True),
            Column("t1id", ForeignKey("t1.id")),
        )

        class T1(object):
            pass

        t1_mapper = mapper(T1, t1)

        @testing.emits_warning()
        @profile_memory()
        def go():
            class T2(object):
                pass

            t2_mapper = mapper(T2, t2)
            t1_mapper.add_property("bar", relationship(t2_mapper))
            s1 = Session()
            # this causes the path_registry to be invoked
            s1.query(t1_mapper)._compile_context()

        go()
Пример #7
0
    def define_tables(cls, metadata):
        Table(
            "users",
            metadata,
            Column(
                "id", Integer, primary_key=True, test_needs_autoincrement=True
            ),
            Column("name", String(50)),
            test_needs_fk=True,
        )

        Table(
            "user_items",
            metadata,
            Column("user_id", ForeignKey("users.id"), primary_key=True),
            Column("item_id", ForeignKey("items.id"), primary_key=True),
            test_needs_fk=True,
        )

        Table(
            "items",
            metadata,
            Column(
                "id", Integer, primary_key=True, test_needs_autoincrement=True
            ),
            Column("name", String(50)),
            test_needs_fk=True,
        )
Пример #8
0
    def define_tables(cls, metadata):

        Table(
            "a",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("x", Integer),
            Column("y", Integer),
        )
        Table(
            "b",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("a_id", ForeignKey("a.id")),
            Column("x", Integer),
            Column("y", Integer),
        )
        Table(
            "c",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("b_id", ForeignKey("b.id")),
            Column("x", Integer),
            Column("y", Integer),
        )
Пример #9
0
    def test_reflect_table_comment(self):
        local_parent = Table(
            "parent",
            self.metadata,
            Column("q", Integer),
            comment="my local comment",
        )

        local_parent.create(testing.db)

        insp = inspect(testing.db)
        eq_(
            insp.get_table_comment("parent",
                                   schema=testing.config.test_schema),
            {"text": "my table comment"},
        )
        eq_(
            insp.get_table_comment("parent", ),
            {"text": "my local comment"},
        )
        eq_(
            insp.get_table_comment(
                "parent", schema=testing.db.dialect.default_schema_name),
            {"text": "my local comment"},
        )
    def define_tables(cls, metadata):
        Table(
            "a",
            metadata,
            Column("id1", Integer, primary_key=True),
            Column("id2", Integer, primary_key=True),
        )

        Table(
            "b_sameorder",
            metadata,
            Column("id", Integer, primary_key=True),
            Column("a_id1", Integer),
            Column("a_id2", Integer),
            ForeignKeyConstraint(["a_id1", "a_id2"], ["a.id1", "a.id2"]),
        )

        Table(
            "b_differentorder",
            metadata,
            Column("id", Integer, primary_key=True),
            Column("a_id1", Integer),
            Column("a_id2", Integer),
            ForeignKeyConstraint(["a_id1", "a_id2"], ["a.id1", "a.id2"]),
        )
Пример #11
0
    def setup(self):
        meta = MetaData(testing.db)
        global table, GoofyType

        class GoofyType(TypeDecorator):
            impl = String

            def process_bind_param(self, value, dialect):
                if value is None:
                    return None
                return "FOO" + value

            def process_result_value(self, value, dialect):
                if value is None:
                    return None
                return value + "BAR"

        table = Table(
            "tables",
            meta,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("persons", Integer),
            Column("full", Boolean),
            Column("goofy", GoofyType(50)),
        )
        table.create(checkfirst=True)
    def define_tables(cls, metadata):
        Table(
            "datas",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("a", Integer, nullable=False),
        )

        Table(
            "foo",
            metadata,
            Column("data_id",
                   Integer,
                   ForeignKey("datas.id"),
                   primary_key=True),
            Column("bar", Integer),
        )

        Table(
            "stats",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("data_id", Integer, ForeignKey("datas.id")),
            Column("somedata", Integer, nullable=False),
        )
    def define_tables(cls, metadata):
        Table(
            "descriptions",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("d1", String(20)),
            Column("d2", String(20)),
        )

        Table(
            "values",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column(
                "description_id",
                Integer,
                ForeignKey("descriptions.id"),
                nullable=False,
            ),
            Column("v1", String(20)),
            Column("v2", String(20)),
        )
 def define_tables(cls, metadata):
     Table(
         "items",
         metadata,
         Column(
             "item_id",
             Integer,
             primary_key=True,
             test_needs_autoincrement=True,
         ),
         Column("name", String(40)),
     )
     Table(
         "item_keywords",
         metadata,
         Column("item_id", Integer, ForeignKey("items.item_id")),
         Column("keyword_id", Integer, ForeignKey("keywords.keyword_id")),
         Column("data", String(40)),
     )
     Table(
         "keywords",
         metadata,
         Column(
             "keyword_id",
             Integer,
             primary_key=True,
             test_needs_autoincrement=True,
         ),
         Column("name", String(40)),
     )
Пример #15
0
    def test_reflect_nvarchar(self):
        metadata = self.metadata
        Table(
            "tnv",
            metadata,
            Column("nv_data", sqltypes.NVARCHAR(255)),
            Column("c_data", sqltypes.NCHAR(20)),
        )
        metadata.create_all()
        m2 = MetaData(testing.db)
        t2 = Table("tnv", m2, autoload=True)
        assert isinstance(t2.c.nv_data.type, sqltypes.NVARCHAR)
        assert isinstance(t2.c.c_data.type, sqltypes.NCHAR)

        if testing.against("oracle+cx_oracle"):
            assert isinstance(
                t2.c.nv_data.type.dialect_impl(testing.db.dialect),
                cx_oracle._OracleUnicodeStringNCHAR,
            )

            assert isinstance(
                t2.c.c_data.type.dialect_impl(testing.db.dialect),
                cx_oracle._OracleNChar,
            )

        data = u("m’a réveillé.")
        with testing.db.connect() as conn:
            conn.execute(t2.insert(), dict(nv_data=data, c_data=data))
            nv_data, c_data = conn.execute(t2.select()).first()
            eq_(nv_data, data)
            eq_(c_data, data + (" " * 7))  # char is space padded
            assert isinstance(nv_data, util.text_type)
            assert isinstance(c_data, util.text_type)
Пример #16
0
    def test_collection_setstate(self):
        """test a particular cycle that requires CollectionAdapter
        to not rely upon InstanceState to deserialize."""

        m = MetaData()
        c1 = Table(
            "c1",
            m,
            Column("parent_id", String, ForeignKey("p.id"), primary_key=True),
        )
        c2 = Table(
            "c2",
            m,
            Column("parent_id", String, ForeignKey("p.id"), primary_key=True),
        )
        p = Table("p", m, Column("id", String, primary_key=True))

        mapper(
            Parent,
            p,
            properties={
                "children1": relationship(Child1),
                "children2": relationship(Child2),
            },
        )
        mapper(Child1, c1)
        mapper(Child2, c2)

        obj = Parent()
        screen1 = Screen(obj)
        screen1.errors = [obj.children1, obj.children2]
        screen2 = Screen(Child2(), screen1)
        pickle.loads(pickle.dumps(screen2))
Пример #17
0
    def define_tables(cls, metadata):
        Table(
            "users",
            metadata,
            Column(
                "id", Integer, primary_key=True, test_needs_autoincrement=True
            ),
            Column("name", String(30), nullable=False),
            Column("some_update", String(30), onupdate="im the update"),
        )

        Table(
            "addresses",
            metadata,
            Column(
                "id", Integer, primary_key=True, test_needs_autoincrement=True
            ),
            Column("user_id", None, ForeignKey("users.id")),
            Column("email_address", String(50), nullable=False),
        )

        Table(
            "foobar",
            metadata,
            Column(
                "id", Integer, primary_key=True, test_needs_autoincrement=True
            ),
            Column("user_id", None, ForeignKey("users.id")),
            Column("data", String(30)),
            Column("some_update", String(30), onupdate="im the other update"),
        )
Пример #18
0
 def define_tables(cls, metadata):
     Table("a", metadata, Column("id", Integer, primary_key=True))
     Table(
         "b",
         metadata,
         Column("id", Integer, primary_key=True),
         Column("aid", ForeignKey("a.id"), nullable=True),
     )
     Table(
         "c",
         metadata,
         Column("id", Integer, primary_key=True),
         Column("aid", ForeignKey("a.id"), nullable=False),
     )
     Table(
         "d",
         metadata,
         Column("id", Integer, primary_key=True),
         Column("aid",
                ForeignKey("a.id", ondelete="cascade"),
                nullable=False),
     )
     Table(
         "e",
         metadata,
         Column("id", Integer, primary_key=True),
         Column("aid",
                ForeignKey("a.id", ondelete="set null"),
                nullable=True),
     )
Пример #19
0
 def define_tables(cls, metadata):
     Table(
         "users",
         metadata,
         Column(
             "id", Integer, primary_key=True, test_needs_autoincrement=True
         ),
         Column("name", String(50)),
         test_needs_fk=True,
     )
     Table(
         "addresses",
         metadata,
         Column(
             "id", Integer, primary_key=True, test_needs_autoincrement=True
         ),
         Column("email", String(50)),
         Column("user_id", Integer, ForeignKey("users.id")),
         test_needs_fk=True,
     )
     Table(
         "imhandles",
         metadata,
         Column(
             "id", Integer, primary_key=True, test_needs_autoincrement=True
         ),
         Column("user_id", Integer),
         Column("network", String(50)),
         Column("handle", String(50)),
         test_needs_fk=True,
     )
Пример #20
0
    def define_tables(cls, metadata):
        Table(
            "single",
            metadata,
            Column("id", Integer, primary_key=True),
            Column("type", String(10)),
            test_needs_fk=True,
        )

        Table(
            "joined_base",
            metadata,
            Column("id", Integer, primary_key=True),
            Column("type", String(10)),
            test_needs_fk=True,
        )

        Table(
            "joined_inh",
            metadata,
            Column("id",
                   Integer,
                   ForeignKey("joined_base.id"),
                   primary_key=True),
            test_needs_fk=True,
        )

        FixtureTest.define_tables(metadata)
    def define_tables(cls, metadata):
        Table(
            "base",
            metadata,
            Column("uid", String(30), primary_key=True),
            Column("x", String(30)),
        )

        Table(
            "derived",
            metadata,
            Column("uid", String(30), ForeignKey("base.uid"),
                   primary_key=True),
            Column("y", String(30)),
        )

        Table(
            "derivedII",
            metadata,
            Column("uid", String(30), ForeignKey("base.uid"),
                   primary_key=True),
            Column("z", String(30)),
        )

        Table(
            "comments",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("uid", String(30), ForeignKey("base.uid")),
            Column("comment", String(30)),
        )
    def define_tables(cls, metadata):
        Table(
            "departments",
            metadata,
            Column(
                "department_id",
                Integer,
                primary_key=True,
                test_needs_autoincrement=True,
            ),
            Column("name", String(50)),
        )

        Table(
            "employees",
            metadata,
            Column(
                "person_id",
                Integer,
                primary_key=True,
                test_needs_autoincrement=True,
            ),
            Column("name", String(50)),
            Column(
                "department_id",
                Integer,
                ForeignKey("departments.department_id"),
            ),
        )
Пример #23
0
 def test_reflect_remote_synonyms(self):
     meta = MetaData(testing.db)
     parent = Table(
         "ptable",
         meta,
         autoload=True,
         schema=testing.config.test_schema,
         oracle_resolve_synonyms=True,
     )
     child = Table(
         "ctable",
         meta,
         autoload=True,
         schema=testing.config.test_schema,
         oracle_resolve_synonyms=True,
     )
     self.assert_compile(
         parent.join(child),
         "%(test_schema)s.ptable JOIN "
         "%(test_schema)s.ctable "
         "ON %(test_schema)s.ptable.id = "
         "%(test_schema)s.ctable.parent_id" %
         {"test_schema": testing.config.test_schema},
     )
     select([parent,
             child]).select_from(parent.join(child)).execute().fetchall()
Пример #24
0
    def test_long_type(self):
        metadata = self.metadata

        t = Table("t", metadata, Column("data", oracle.LONG))
        metadata.create_all(testing.db)
        testing.db.execute(t.insert(), data="xyz")
        eq_(testing.db.scalar(select([t.c.data])), "xyz")
    def define_tables(cls, metadata):

        Table(
            "owners",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("data", String(30)),
        )

        Table(
            "categories",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("name", String(20)),
        )

        Table(
            "tests",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("owner_id",
                   Integer,
                   ForeignKey("owners.id"),
                   nullable=False),
            Column(
                "category_id",
                Integer,
                ForeignKey("categories.id"),
                nullable=False,
            ),
        )

        Table(
            "options",
            metadata,
            Column("test_id",
                   Integer,
                   ForeignKey("tests.id"),
                   primary_key=True),
            Column("owner_id",
                   Integer,
                   ForeignKey("owners.id"),
                   primary_key=True),
            Column(
                "someoption",
                sa.Boolean,
                server_default=sa.false(),
                nullable=False,
            ),
        )
Пример #26
0
 def define_tables(cls, metadata):
     Table("table1", metadata, Column("id", Integer, primary_key=True))
     Table(
         "table2",
         metadata,
         Column("t1id", Integer, ForeignKey("table1.id"), primary_key=True),
         Column("num", Integer, primary_key=True),
     )
Пример #27
0
 def define_tables(cls, metadata):
     Table("Table1", metadata, Column("ID", Integer, primary_key=True))
     Table(
         "Table2",
         metadata,
         Column("T1ID", Integer, ForeignKey("Table1.ID"), primary_key=True),
         Column("NUM", Integer, primary_key=True),
     )
    def _setup(self, test_collection_class):
        """Build a relationship situation using the given
        test_collection_class factory"""

        global metadata, slides_table, bullets_table, Slide, Bullet

        slides_table = Table(
            "test_Slides",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("name", String(128)),
        )
        bullets_table = Table(
            "test_Bullets",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("slide_id", Integer, ForeignKey("test_Slides.id")),
            Column("position", Integer),
            Column("text", String(128)),
        )

        class Slide(object):
            def __init__(self, name):
                self.name = name

            def __repr__(self):
                return '<Slide "%s">' % self.name

        class Bullet(object):
            def __init__(self, text):
                self.text = text

            def __repr__(self):
                return '<Bullet "%s" pos %s>' % (self.text, self.position)

        mapper(
            Slide,
            slides_table,
            properties={
                "bullets":
                relationship(
                    Bullet,
                    lazy="joined",
                    collection_class=test_collection_class,
                    backref="slide",
                    order_by=[bullets_table.c.position],
                )
            },
        )
        mapper(Bullet, bullets_table)

        metadata.create_all()
    def _unhashable_fixture(self, metadata, load_on_pending=False):
        class MyHashType(sa.TypeDecorator):
            impl = sa.String(100)

            def process_bind_param(self, value, dialect):
                return ";".join(
                    "%s=%s" % (k, v)
                    for k, v in sorted(value.items(), key=lambda key: key[0]))

            def process_result_value(self, value, dialect):
                return dict(elem.split("=", 1) for elem in value.split(";"))

        category = Table(
            "category",
            metadata,
            Column("id", Integer, primary_key=True),
            Column("data", MyHashType()),
        )
        article = Table(
            "article",
            metadata,
            Column("id", Integer, primary_key=True),
            Column("data", MyHashType()),
        )

        class Category(fixtures.ComparableEntity):
            pass

        class Article(fixtures.ComparableEntity):
            pass

        mapper(Category, category)
        mapper(
            Article,
            article,
            properties={
                "category":
                relationship(
                    Category,
                    primaryjoin=orm.foreign(article.c.data) == category.c.data,
                    load_on_pending=load_on_pending,
                )
            },
        )

        metadata.create_all()
        sess = Session(autoflush=False)
        data = {"im": "unhashable"}
        a1 = Article(id=1, data=data)
        c1 = Category(id=1, data=data)
        if load_on_pending:
            sess.add(c1)
        else:
            sess.add_all([c1, a1])
        sess.flush()
        if load_on_pending:
            sess.add(a1)
        return Category, Article, sess, a1, c1
 def define_tables(cls, metadata):
     Table("person", metadata,
           Column("id", cls.StringAsInt, primary_key=True))
     Table(
         "pets",
         metadata,
         Column("id", Integer, primary_key=True),
         Column("person_id", Integer),
     )