Source code for sqlobject.tests.test_subqueries
from sqlobject import ForeignKey, SQLObject, StringCol
from sqlobject.sqlbuilder import EXISTS, IN, LEFTOUTERJOINOn, NOTEXISTS, \
    Outer, Select
from sqlobject.tests.dbtest import setupClass
########################################
# Subqueries (subselects)
########################################
[docs]class SOTestIn1(SQLObject):
    col1 = StringCol() 
[docs]class SOTestIn2(SQLObject):
    col2 = StringCol() 
[docs]class SOTestOuter(SQLObject):
    fk = ForeignKey('SOTestIn1') 
[docs]def setup():
    setupClass(SOTestIn1)
    setupClass(SOTestIn2) 
[docs]def insert():
    setup()
    SOTestIn1(col1=None)
    SOTestIn1(col1='')
    SOTestIn1(col1="test")
    SOTestIn2(col2=None)
    SOTestIn2(col2='')
    SOTestIn2(col2="test") 
[docs]def test_1syntax_in():
    setup()
    select = SOTestIn1.select(IN(SOTestIn1.q.col1, Select(SOTestIn2.q.col2)))
    assert str(select) == \
        
"SELECT so_test_in1.id, so_test_in1.col1 " \
        
"FROM so_test_in1 WHERE so_test_in1.col1 IN " \
        
"(SELECT so_test_in2.col2 FROM so_test_in2)"
    select = SOTestIn1.select(IN(SOTestIn1.q.col1, SOTestIn2.select()))
    assert str(select) == \
        
"SELECT so_test_in1.id, so_test_in1.col1 " \
        
"FROM so_test_in1 WHERE so_test_in1.col1 IN " \
        
"(SELECT so_test_in2.id FROM so_test_in2 WHERE 1 = 1)" 
[docs]def test_3syntax_exists():
    setup()
    select = SOTestIn1.select(NOTEXISTS(
        Select(SOTestIn2.q.col2,
               where=(Outer(SOTestIn1).q.col1 == SOTestIn2.q.col2))))
    assert str(select) == \
        
"SELECT so_test_in1.id, so_test_in1.col1 " \
        
"FROM so_test_in1 WHERE NOT EXISTS " \
        
"(SELECT so_test_in2.col2 FROM so_test_in2 " \
        
"WHERE ((so_test_in1.col1) = (so_test_in2.col2)))"
    setupClass(SOTestOuter)
    select = SOTestOuter.select(NOTEXISTS(
        Select(SOTestIn1.q.col1,
               where=(Outer(SOTestOuter).q.fk == SOTestIn1.q.id))))
    assert str(select) == \
        
"SELECT so_test_outer.id, so_test_outer.fk_id " \
        
"FROM so_test_outer WHERE NOT EXISTS " \
        
"(SELECT so_test_in1.col1 FROM so_test_in1 " \
        
"WHERE ((so_test_outer.fk_id) = (so_test_in1.id)))" 
[docs]def test_4syntax_direct():
    setup()
    select = SOTestIn1.select(SOTestIn1.q.col1 == Select(SOTestIn2.q.col2,
                              where=(SOTestIn2.q.col2 == "test")))
    assert str(select) == \
        
"SELECT so_test_in1.id, so_test_in1.col1 " \
        
"FROM so_test_in1 WHERE ((so_test_in1.col1) = " \
        
"(SELECT so_test_in2.col2 FROM so_test_in2 " \
        
"WHERE ((so_test_in2.col2) = ('test'))))" 
[docs]def test_6syntax_join():
    insert()
    j = LEFTOUTERJOINOn(SOTestIn2, SOTestIn1,
                        SOTestIn1.q.col1 == SOTestIn2.q.col2)
    select = SOTestIn1.select(SOTestIn1.q.col1 == Select(SOTestIn2.q.col2,
                              where=(SOTestIn2.q.col2 == "test"), join=j))
    assert str(select) == \
        
"SELECT so_test_in1.id, so_test_in1.col1 " \
        
"FROM so_test_in1 WHERE ((so_test_in1.col1) = " \
        
"(SELECT so_test_in2.col2 FROM so_test_in2 " \
        
"LEFT OUTER JOIN so_test_in1 ON " \
        
"((so_test_in1.col1) = (so_test_in2.col2)) " \
        
"WHERE ((so_test_in2.col2) = ('test'))))"