예제 #1
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,
            ),
        )
 def test_function(self):
     self.assert_compile(func.foo(1, 2), "foo(:foo_1, :foo_2)")
     self.assert_compile(func.current_time(), "CURRENT_TIME")
     self.assert_compile(func.foo(), "foo")
     m = MetaData()
     t = Table("sometable", m, Column("col1", Integer),
               Column("col2", Integer))
     self.assert_compile(
         select([func.max(t.c.col1)]),
         "SELECT max(sometable.col1) AS max_1 FROM "
         "sometable",
     )
예제 #3
0
    def test_delete_invalid_evaluation(self):
        User = self.classes.User

        sess = Session()

        john, jack, jill, jane = sess.query(User).order_by(User.id).all()

        assert_raises(
            exc.InvalidRequestError,
            sess.query(User).filter(
                User.name == select([func.max(User.name)])).delete,
            synchronize_session="evaluate",
        )

        sess.query(User).filter(
            User.name == select([func.max(User.name)])).delete(
                synchronize_session="fetch")

        assert john not in sess

        eq_(sess.query(User).order_by(User.id).all(), [jack, jill, jane])
 def test_funcfilter_fromobj_fromfunc(self):
     # test from_obj generation.
     # from func:
     self.assert_compile(
         select(
             [
                 func.max(table1.c.name).filter(
                     literal_column("description") != None  # noqa
                 )
             ]
         ),
         "SELECT max(mytable.name) FILTER (WHERE description "
         "IS NOT NULL) AS anon_1 FROM mytable",
     )
예제 #5
0
    def test_delete_from_joined_subq_test(self):
        Document = self.classes.Document
        s = Session()

        subq = (s.query(func.max(Document.title).label("title")).group_by(
            Document.user_id).subquery())

        s.query(Document).filter(Document.title == subq.c.title).delete(
            synchronize_session=False)

        eq_(
            set(s.query(Document.id, Document.flag)),
            set([(2, None), (3, None), (6, None)]),
        )
예제 #6
0
    def test_aggregate(self):
        foo, Foo = self.tables.foo, self.classes.Foo

        sess = create_session()
        query = sess.query(Foo)
        assert query.count() == 100
        assert sess.query(func.min(
            foo.c.bar)).filter(foo.c.bar < 30).one() == (0, )

        assert sess.query(func.max(
            foo.c.bar)).filter(foo.c.bar < 30).one() == (29, )
        assert (next(
            query.filter(foo.c.bar < 30).values(sa.func.max(
                foo.c.bar)))[0] == 29)
        assert (next(
            query.filter(foo.c.bar < 30).values(sa.func.max(
                foo.c.bar)))[0] == 29)
예제 #7
0
    def test_inline_defaults(self):
        m = MetaData()
        foo = Table("foo", m, Column("id", Integer))

        t = Table(
            "test",
            m,
            Column("col1", Integer, default=func.foo(1)),
            Column(
                "col2",
                Integer,
                default=select([func.coalesce(func.max(foo.c.id))]),
            ),
        )

        self.assert_compile(
            t.insert(inline=True, values={}),
            "INSERT INTO test (col1, col2) VALUES (foo(:foo_1), "
            "(SELECT coalesce(max(foo.id)) AS coalesce_1 FROM "
            "foo))",
        )
예제 #8
0
    def test_update_using_in(self):
        Document = self.classes.Document
        s = Session()

        subq = (s.query(func.max(Document.title).label("title")).group_by(
            Document.user_id).subquery())

        s.query(Document).filter(Document.title.in_(subq)).update(
            {"flag": True}, synchronize_session=False)

        eq_(
            set(s.query(Document.id, Document.flag)),
            set([
                (1, True),
                (2, None),
                (3, None),
                (4, True),
                (5, True),
                (6, None),
            ]),
        )
예제 #9
0
    def test_inline_defaults(self):
        m = MetaData()
        foo = Table("foo", m, Column("id", Integer))

        t = Table(
            "test",
            m,
            Column("col1", Integer, onupdate=func.foo(1)),
            Column(
                "col2",
                Integer,
                onupdate=select([func.coalesce(func.max(foo.c.id))]),
            ),
            Column("col3", String(30)),
        )

        self.assert_compile(
            t.update(inline=True, values={"col3": "foo"}),
            "UPDATE test SET col1=foo(:foo_1), col2=(SELECT "
            "coalesce(max(foo.id)) AS coalesce_1 FROM foo), "
            "col3=:col3",
        )
예제 #10
0
    def test_update_using_case(self):
        Document = self.classes.Document
        s = Session()

        subq = (s.query(func.max(Document.title).label("title")).group_by(
            Document.user_id).subquery())

        # this would work with Firebird if you do literal_column('1')
        # instead
        case_stmt = case([(Document.title.in_(subq), True)], else_=False)
        s.query(Document).update({"flag": case_stmt},
                                 synchronize_session=False)

        eq_(
            set(s.query(Document.id, Document.flag)),
            set([
                (1, True),
                (2, False),
                (3, False),
                (4, True),
                (5, True),
                (6, False),
            ]),
        )