def test_table_name_that_is_greater_than_16_chars(self):
        metadata = self.metadata
        Table(
            "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
            metadata,
            Column("id", Integer, primary_key=True),
            Column("foo", Integer),
            Index("foo_idx", "foo"),
        )
        metadata.create_all()

        t = Table("ABCDEFGHIJKLMNOPQRSTUVWXYZ",
                  MetaData(),
                  autoload_with=testing.db)
        eq_(t.name, "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
 def test_column_level_ck_name(self):
     t = Table(
         "tbl",
         MetaData(),
         Column(
             "a",
             Integer,
             CheckConstraint("a > 5", name="ck_a_greater_five"),
         ),
     )
     self.assert_compile(
         schema.CreateTable(t),
         "CREATE TABLE tbl (a INTEGER CONSTRAINT "
         "ck_a_greater_five CHECK (a > 5))",
     )
 def test_table_uc_clustering(self):
     metadata = MetaData()
     tbl = Table(
         "test",
         metadata,
         Column("x", Integer, autoincrement=False),
         Column("y", Integer, autoincrement=False),
         PrimaryKeyConstraint("x"),
         UniqueConstraint("y", mssql_clustered=True),
     )
     self.assert_compile(
         schema.CreateTable(tbl),
         "CREATE TABLE test (x INTEGER NOT NULL, y INTEGER NULL, "
         "PRIMARY KEY (x), UNIQUE CLUSTERED (y))",
     )
 def test_identity_illegal_two_autoincrements(self):
     metadata = MetaData()
     tbl = Table(
         "test",
         metadata,
         Column("id", Integer, autoincrement=True),
         Column("id2", Integer, autoincrement=True),
     )
     # this will be rejected by the database, just asserting this is what
     # the two autoincrements will do right now
     self.assert_compile(
         schema.CreateTable(tbl),
         "CREATE TABLE test (id INTEGER NOT NULL IDENTITY(1,1), "
         "id2 INTEGER NOT NULL IDENTITY(1,1))",
     )
    def test_bindparam_quote(self):
        """test that bound parameters take on quoting for reserved words,
        column names quote flag enabled."""
        # note: this is only in cx_oracle at the moment.  not sure
        # what other hypothetical oracle dialects might need

        self.assert_compile(bindparam("option"), ':"option"')
        self.assert_compile(bindparam("plain"), ":plain")
        t = Table("s", MetaData(), Column("plain", Integer, quote=True))
        self.assert_compile(
            t.insert().values(plain=5),
            'INSERT INTO s ("plain") VALUES (:"plain")',
        )
        self.assert_compile(t.update().values(plain=5),
                            'UPDATE s SET "plain"=:"plain"')
    def test_join_condition_ignore_nonexistent_tables(self):
        m = MetaData()
        t1 = Table("t1", m, Column("id", Integer))
        t2 = Table("t2", m, Column("id", Integer),
                   Column("t1id", ForeignKey("t1.id")))
        with testing.expect_deprecated(
                "The join_condition.ignore_nonexistent_tables "
                "parameter is deprecated"):
            join_cond = sql_util.join_condition(t1,
                                                t2,
                                                ignore_nonexistent_tables=True)

        t1t2 = t1.join(t2)

        assert t1t2.onclause.compare(join_cond)
Esempio n. 7
0
    def test_autoincrement_reflected_from_server_default(self, connection):
        metadata = self.metadata
        t = Table(
            "x",
            metadata,
            Column("y", Integer, server_default="5", primary_key=True),
            Column("data", String(10)),
            implicit_returning=False,
        )
        assert t._autoincrement_column is None
        metadata.create_all(connection)

        m2 = MetaData()
        t2 = Table("x", m2, autoload_with=connection, implicit_returning=False)
        assert t2._autoincrement_column is None
Esempio n. 8
0
 def test_autoincrement_ignore_fk(self):
     m = MetaData()
     Table("y", m, Column("id", Integer(), primary_key=True))
     x = Table(
         "x",
         m,
         Column(
             "id",
             Integer(),
             ForeignKey("y.id"),
             autoincrement="ignore_fk",
             primary_key=True,
         ),
     )
     assert x._autoincrement_column is x.c.id
Esempio n. 9
0
    def test_innodb_autoincrement(self):
        t1 = Table(
            "sometable",
            MetaData(),
            Column("assigned_id",
                   Integer(),
                   primary_key=True,
                   autoincrement=False),
            Column("id", Integer(), primary_key=True, autoincrement=True),
            mysql_engine="InnoDB",
        )
        self.assert_compile(
            schema.CreateTable(t1),
            "CREATE TABLE sometable (assigned_id "
            "INTEGER NOT NULL, id INTEGER NOT NULL "
            "AUTO_INCREMENT, PRIMARY KEY (id, assigned_id)"
            ")ENGINE=InnoDB",
        )

        t1 = Table(
            "sometable",
            MetaData(),
            Column("assigned_id",
                   Integer(),
                   primary_key=True,
                   autoincrement=True),
            Column("id", Integer(), primary_key=True, autoincrement=False),
            mysql_engine="InnoDB",
        )
        self.assert_compile(
            schema.CreateTable(t1),
            "CREATE TABLE sometable (assigned_id "
            "INTEGER NOT NULL AUTO_INCREMENT, id "
            "INTEGER NOT NULL, PRIMARY KEY "
            "(assigned_id, id))ENGINE=InnoDB",
        )
    def test_table_is_reflected(self):
        from sqlalchemy_1_3.types import (
            Integer,
            Text,
            BLOB,
            String,
            Date,
            Time,
            DateTime,
        )

        metadata = MetaData(testing.db)
        table = Table("testtable", metadata, autoload=True)
        eq_(
            set(table.columns.keys()),
            set([
                "question",
                "answer",
                "remark",
                "photo",
                "d",
                "t",
                "dt",
                "redundant",
            ]),
            "Columns of reflected table didn't equal expected "
            "columns",
        )
        eq_(table.c.question.primary_key, True)

        # disabled per http://www.sqlalchemy.org/trac/ticket/1660
        # eq_(table.c.question.sequence.name, 'gen_testtable_id')

        assert isinstance(table.c.question.type, Integer)
        eq_(table.c.question.server_default.arg.text, "42")
        assert isinstance(table.c.answer.type, String)
        assert table.c.answer.type.length == 255
        eq_(table.c.answer.server_default.arg.text, "'no answer'")
        assert isinstance(table.c.remark.type, Text)
        eq_(table.c.remark.server_default.arg.text, "''")
        assert isinstance(table.c.photo.type, BLOB)
        assert table.c.redundant.server_default is None

        # The following assume a Dialect 3 database

        assert isinstance(table.c.d.type, Date)
        assert isinstance(table.c.t.type, Time)
        assert isinstance(table.c.dt.type, DateTime)
Esempio n. 11
0
    def test_create_index_with_parser(self):
        m = MetaData()
        tbl = Table("testtbl", m, Column("data", String(255)))
        idx = Index(
            "test_idx1",
            tbl.c.data,
            mysql_length=10,
            mysql_prefix="FULLTEXT",
            mysql_with_parser="ngram",
        )

        self.assert_compile(
            schema.CreateIndex(idx),
            "CREATE FULLTEXT INDEX test_idx1 "
            "ON testtbl (data(10)) WITH PARSER ngram",
        )
Esempio n. 12
0
 def setup(self):
     metadata = MetaData()
     self.t1 = table(
         "t1",
         column("a", Integer),
         column("b", String),
         column("c", String),
     )
     self.t2 = Table(
         "t2",
         metadata,
         Column("a", Integer),
         Column("b", Integer),
         Column("c", Integer),
         schema="schema",
     )
    def test_indexes_cols_with_spaces(self):
        metadata = self.metadata

        t1 = Table(
            "t",
            metadata,
            Column("x col", Integer, key="x"),
            Column("y", Integer),
        )
        Index("foo", t1.c.x, t1.c.y)
        metadata.create_all()

        m2 = MetaData()
        t2 = Table("t", m2, autoload=True, autoload_with=testing.db)

        eq_(set(list(t2.indexes)[0].columns), set([t2.c["x col"], t2.c.y]))
Esempio n. 14
0
 def test_innodb_autoincrement_reserved_word_column_name(self):
     t1 = Table(
         "sometable",
         MetaData(),
         Column("id", Integer(), primary_key=True, autoincrement=False),
         Column("order", Integer(), primary_key=True, autoincrement=True),
         mysql_engine="InnoDB",
     )
     self.assert_compile(
         schema.CreateTable(t1),
         "CREATE TABLE sometable ("
         "id INTEGER NOT NULL, "
         "`order` INTEGER NOT NULL AUTO_INCREMENT, "
         "PRIMARY KEY (`order`, id)"
         ")ENGINE=InnoDB",
     )
    def test_all_orm_descriptors_pep520_classical(self):
        class MyClass(object):
            pass

        from sqlalchemy_1_3.orm import mapper
        from sqlalchemy_1_3 import Table, MetaData, Column, Integer

        names = self._random_names()

        m = MetaData()
        t = Table("t", m, Column("id", Integer, primary_key=True),
                  *[Column(name, Integer) for name in names])

        m = mapper(MyClass, t)

        eq_(m.all_orm_descriptors.keys(), ["id"] + names)
    def test_table_options(self):
        m = MetaData()

        t = Table(
            "foo",
            m,
            Column("x", Integer),
            prefixes=["GLOBAL TEMPORARY"],
            oracle_on_commit="PRESERVE ROWS",
        )

        self.assert_compile(
            schema.CreateTable(t),
            "CREATE GLOBAL TEMPORARY TABLE "
            "foo (x INTEGER) ON COMMIT PRESERVE ROWS",
        )
Esempio n. 17
0
    def test_reflect_basic_compression(self):
        metadata = self.metadata

        tbl = Table(
            "test_compress",
            metadata,
            Column("data", Integer, primary_key=True),
            oracle_compress=True,
        )
        metadata.create_all()

        m2 = MetaData(testing.db)

        tbl = Table("test_compress", m2, autoload=True)
        # Don't hardcode the exact value, but it must be non-empty
        assert tbl.dialect_options["oracle"]["compress"]
    def _use_alter_fixture_one(self):
        m = MetaData()

        t1 = Table(
            "t1",
            m,
            Column("id", Integer, primary_key=True),
            Column("t2id", Integer, ForeignKey("t2.id")),
        )
        t2 = Table(
            "t2",
            m,
            Column("id", Integer, primary_key=True),
            Column("t1id", Integer, ForeignKey("t1.id")),
        )
        return m, t1, t2
    def test_returning_update_computed_warning(self):
        m = MetaData()
        t1 = Table(
            "t1",
            m,
            Column("id", Integer, primary_key=True),
            Column("foo", Integer),
            Column("bar", Integer, Computed("foo + 42")),
        )

        with testing.expect_warnings(
                "Computed columns don't work with Oracle UPDATE"):
            self.assert_compile(
                t1.update().values(id=1, foo=5).returning(t1.c.bar),
                "UPDATE t1 SET id=:id, foo=:foo RETURNING t1.bar INTO :ret_0",
            )
Esempio n. 20
0
 def test_create_drop_explicit(self):
     metadata = MetaData()
     table = Table("test_table", metadata, Column("foo", Integer))
     for bind in (testing.db, testing.db.connect()):
         for args in [([], {"bind": bind}), ([bind], {})]:
             metadata.create_all(*args[0], **args[1])
             assert table.exists(*args[0], **args[1])
             metadata.drop_all(*args[0], **args[1])
             table.create(*args[0], **args[1])
             table.drop(*args[0], **args[1])
             assert not table.exists(*args[0], **args[1])
Esempio n. 21
0
 def test_subquery_one(self):
     # Lower case names, should not quote
     metadata = MetaData()
     t1 = Table("t1", metadata, Column("col1", Integer), schema="foo")
     a = t1.select().alias("anon")
     b = select([1], a.c.col1 == 2, from_obj=a)
     self.assert_compile(
         b,
         "SELECT 1 "
         "FROM ("
         "SELECT "
         "foo.t1.col1 AS col1 "
         "FROM "
         "foo.t1"
         ") AS anon "
         "WHERE anon.col1 = :col1_1",
     )
Esempio n. 22
0
    def setup(self):
        meta = MetaData(testing.db)
        global table

        table = Table(
            "tables",
            meta,
            Column(
                "id",
                Integer,
                primary_key=True,
                key="foo_id",
                test_needs_autoincrement=True,
            ),
            Column("data", String(20)),
        )
        table.create(checkfirst=True)
Esempio n. 23
0
 def test_reflect_alt_synonym_owner_local_table(self):
     meta = MetaData(testing.db)
     parent = Table(
         "local_table",
         meta,
         autoload=True,
         oracle_resolve_synonyms=True,
         schema=testing.config.test_schema,
     )
     self.assert_compile(
         parent.select(),
         "SELECT %(test_schema)s.local_table.id, "
         "%(test_schema)s.local_table.data "
         "FROM %(test_schema)s.local_table" %
         {"test_schema": testing.config.test_schema},
     )
     select([parent]).execute().fetchall()
Esempio n. 24
0
 def test_longstring(self):
     metadata = MetaData(testing.db)
     testing.db.execute(
         """
     CREATE TABLE Z_TEST
     (
       ID        NUMERIC(22) PRIMARY KEY,
       ADD_USER  VARCHAR2(20)  NOT NULL
     )
     """
     )
     try:
         t = Table("z_test", metadata, autoload=True)
         t.insert().execute(id=1.0, add_user="******")
         assert t.select().execute().fetchall() == [(1, "foobar")]
     finally:
         testing.db.execute("DROP TABLE Z_TEST")
Esempio n. 25
0
 def test_char_length(self):
     metadata = self.metadata
     t1 = Table(
         "t1",
         metadata,
         Column("c1", VARCHAR(50)),
         Column("c2", NVARCHAR(250)),
         Column("c3", CHAR(200)),
         Column("c4", NCHAR(180)),
     )
     t1.create()
     m2 = MetaData(testing.db)
     t2 = Table("t1", m2, autoload=True)
     eq_(t2.c.c1.type.length, 50)
     eq_(t2.c.c2.type.length, 250)
     eq_(t2.c.c3.type.length, 200)
     eq_(t2.c.c4.type.length, 180)
Esempio n. 26
0
 def test_anticipate_no_pk_non_composite_pk_implicit_returning(self):
     t = Table(
         "t",
         MetaData(),
         Column("x", Integer, primary_key=True, autoincrement=False),
         Column("q", Integer),
     )
     d = postgresql.dialect()
     d.implicit_returning = True
     with expect_warnings("Column 't.x' is marked as a member.*"
                          "may not store NULL.$"):
         self.assert_compile(
             t.insert(),
             "INSERT INTO t (q) VALUES (%(q)s)",
             params={"q": 5},
             dialect=d,
         )
Esempio n. 27
0
 def test_anticipate_no_pk_composite_pk_prefetch(self):
     t = Table(
         "t",
         MetaData(),
         Column("x", Integer, primary_key=True),
         Column("y", Integer, primary_key=True),
     )
     d = postgresql.dialect()
     d.implicit_returning = False
     with expect_warnings("Column 't.y' is marked as a member.*"
                          "Note that as of SQLAlchemy 1.1,"):
         self.assert_compile(
             t.insert(),
             "INSERT INTO t (x) VALUES (%(x)s)",
             params={"x": 5},
             dialect=d,
         )
Esempio n. 28
0
 def test_insert_from_select_no_defaults(self):
     metadata = MetaData()
     table = Table(
         "sometable",
         metadata,
         Column("id", Integer, primary_key=True),
         Column("foo", Integer, default=func.foobar()),
     )
     table1 = self.tables.mytable
     sel = select([table1.c.myid]).where(table1.c.name == "foo")
     ins = table.insert().from_select(["id"], sel, include_defaults=False)
     self.assert_compile(
         ins,
         "INSERT INTO sometable (id) SELECT mytable.myid "
         "FROM mytable WHERE mytable.name = :name_1",
         checkparams={"name_1": "foo"},
     )
Esempio n. 29
0
 def test_lastrow_accessor_six(self):
     metadata = MetaData()
     self._test_lastrow_accessor(
         Table(
             "t6",
             metadata,
             Column(
                 "id",
                 Integer,
                 primary_key=True,
                 test_needs_autoincrement=True,
             ),
             Column("bar", Integer, primary_key=True),
         ),
         {"bar": 0},
         {"id": 1, "bar": 0},
     )
Esempio n. 30
0
    def test_varchar_raise(self, type_):
        type_ = sqltypes.to_instance(type_)
        assert_raises_message(
            exc.CompileError,
            "VARCHAR requires a length on dialect mysql",
            type_.compile,
            dialect=mysql.dialect(),
        )

        t1 = Table("sometable", MetaData(), Column("somecolumn", type_))
        assert_raises_message(
            exc.CompileError,
            r"\(in table 'sometable', column 'somecolumn'\)\: "
            r"(?:N)?VARCHAR requires a length on dialect mysql",
            schema.CreateTable(t1).compile,
            dialect=mysql.dialect(),
        )