⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alltest.py

📁 python web programming 部分
💻 PY
📖 第 1 页 / 共 2 页
字号:
    c.SELECT("*", FROM="frequents", WHERE="perweek between 2 and (%s)" %
        c.SELECT("avg(perweek)", FROM="frequents")),
    c.SELECT("*", FROM="frequents", WHERE="perweek not between 2 and 5"),
    c.SELECT(["f.drinker", "l.beer", "s.bar"],
        FROM=(["frequents", "f"], ["serves", "s"], ["likes", "l"]),
        WHERE="f.drinker=l.drinker and s.bar=f.bar and s.beer=l.beer"),
    c.SELECT("*", FROM="serves"),
    c.SELECT("*", FROM="likes"),
    c.SELECT("*", FROM="frequents", WHERE="drinker = 'norm'"),
    c.UNION(c.SELECT("drinker", FROM="likes") ,
            c.SELECT("drinker", FROM="frequents")),
    c.UNION(c.SELECT("drinker", FROM="likes"),
            c.SELECT("distinct drinker", FROM="frequents")),
    c.SELECT("*", FROM="frequents", WHERE="drinker>'norm'"),
    c.SELECT("*", FROM="frequents", WHERE="drinker<='norm'"),
    c.SELECT("*", FROM="frequents", WHERE="drinker>'norm' or drinker<'b'"),
    c.SELECT("*", FROM="frequents", WHERE="drinker<>'norm' and 'pierre'<>drinker"),
    c.SELECT("*", FROM="frequents", WHERE="drinker<>'norm'"),
    c.SELECT("*", FROM=[["frequents", "f"], ["serves", "s"]], WHERE="f.bar = s.bar"),
    c.SELECT("*", FROM=[["frequents", "f"], ["serves", "s"]],
            WHERE="f.bar = s.bar and not exists(%s)" %
           c.SELECT("l.drinker, l.beer",
                  FROM="likes l",
                  WHERE="l.drinker=f.drinker and s.beer=l.beer")),
    c.SELECT("*", FROM=[["likes", "l"], ["frequents", "f"]],
                  WHERE="f.bar='cheers' and l.drinker=f.drinker and l.beer='bud'"),
    c.SELECT("*", FROM=["serves", "s"], WHERE="not exists (%s)" %
                  c.SELECT("*",
                          FROM=(["likes", "l"], ["frequents", "f"]),
                          WHERE="f.bar = s.bar and f.drinker=l.drinker and s.beer=l.beer")),
    c.SELECT("'nonbeer drinker ' || f.drinker",
                  FROM=["frequents", "f"],
                  WHERE="not exists (%s)" %
                  c.SELECT("l.drinker, l.beer",
                           FROM=["likes", "l"],
                           WHERE="l.drinker=f.drinker")),
    c.SELECT("l.drinker || ' likes ' || l.beer || ' but goes to no bar'",
                  FROM=["likes", "l"],
                  WHERE="not exists (%s)" %
                  c.SELECT("f.drinker",
                           FROM=["frequents", "f"],
                           WHERE="f.drinker=l.drinker")),
    c.SELECT("bar", FROM="frequents"),
    c.SELECT("distinct bar", FROM="frequents"),
    c.SELECT("sum(quantity), avg(quantity), count(*), sum(quantity)/count(quantity)",
            FROM="serves"),
    c.SELECT("beer, sum(quantity), avg(quantity), count(*), sum(quantity)/count(quantity)",
            FROM="serves",
            REST="group by beer"),
    c.SELECT("sum(quantity), avg(quantity), count(*), sum(quantity)/count(quantity)",
            FROM="serves", WHERE="beer<>'bud'"),
    c.SELECT("bar, sum(quantity), avg(quantity), count(*), sum(quantity)/count(quantity)",
            FROM="serves",
            WHERE="beer<>'bud'",
            REST="""group by bar
                having sum(quantity)>500 or count(*)>3
                order by 2 desc"""),
    c.SELECT("beer, sum(quantity), avg(quantity), count(*)",
            FROM="serves", WHERE="beer<>'bud'",
            REST="""group by beer
                having sum(quantity)>100
                order by 4 desc, beer"""),
    c.SELECT("l.drinker, l.beer, count(*), sum(l.perday*f.perweek)",
    	FROM="likes l, frequents f", WHERE="l.drinker=f.drinker",
            REST="""group by l.drinker, l.beer
                order by 4 desc, l.drinker, l.beer"""),
    c.SELECT("l.drinker, l.beer, f.bar, l.perday, f.perweek",
            FROM="likes l, frequents f",
            WHERE="l.drinker=f.drinker",
            REST="order by l.drinker, l.perday desc, f.perweek desc"),
    ]

    c.commit()
    print "\n+++RUNNING QUERIES+++\n"
    for x in queries:
        print; print
        print x
        sys.stdout.flush()
        c.execute(x)
        print cpp(c)
        sys.stdout.flush()

    print "\n+++PREPARING DYNAMIC QUERIES+++\n"
    dynamic_queries = [
    ( c.SELECT("bar", FROM="frequents", WHERE="drinker=?"), ("norm",) ), 
    ( c.SELECT("*", FROM="frequents", WHERE="drinker=? or bar=?"), ("norm", "cheers"))
    ]

    print "\n+++RUNNING DYNAMIC QUERIES+++\n"
    for (x,y) in dynamic_queries:
        print x
        print "dynamic data:", y
        c.execute(x, y)
        print cpp(c)

    print "\n+++PREPARING REPEAT TESTS+++\n"
    repeats = [
    c.SELECT(["f.drinker", "l.beer", "s.bar"],
            FROM=[["frequents", "f"], ["serves", "s"], ["likes", "l"]],
            WHERE="f.drinker=l.drinker and s.bar=f.bar and s.beer=l.beer"),
    c.SELECT("*",
       FROM=[["frequents", "f"], ["serves", "s"]],
       WHERE="""f.bar = s.bar and
         not exists(%s)""" %
           c.SELECT(["l.drinker", "l.beer"],
                FROM=["likes", "l"],
                WHERE="l.drinker=f.drinker and s.beer=l.beer")),
    c.SELECT("*", FROM="frequents",
            WHERE="drinker = 'norm'"),
    ]

    print "\n+++RUNNING REPEAT TESTS+++\n"
    from time import time
    for x in repeats:
        print "\nrepeating", x
        now = time()
        c.execute(x)
        print time()-now, "first time"
        now = time()
        c.execute(x)
        print time()-now, "second time"
        now = time()
        c.execute(x)
        print time()-now, "third time"
    print "*** committing work"
    print; print

    print "\n+++RUNNING POST-TEST CLEANUPS+++\n"
    print "(failures normally occur here too)"
    for q in cleanup_queries:
        try:
            print q
            c.execute(q)
        except: # this is a bit dodgy: error classes might vary
            pass

    c.commit()

    return

def dataseq(s):
    from string import split
    l = split(s, "\n")
    result = map(split, l)
    from string import atoi
    for l in result:
        l[2] = atoi(l[2])
    result = map(tuple, result)
    return result
    

updates = [
"""select * from frequents""",
"""select * from likes""",
"""select * from serves""",
"""select bar, sum(quantity), avg(quantity), count(*), sum(quantity)/count(quantity)
   from serves
   where beer<>'bud'
   group by bar
   having sum(quantity)>500 or count(*)>3
   order by 2 desc
""",

"""select count(*), d from nondrinkers group by d""",
"""insert into frequents (drinker, perweek, bar)
   values ('billybob', 4, 'cheers')""",
"""select * from nondrinkers""",
"""create table templikes (dr varchar, be varchar)""",
"""select * from templikes""",
"""insert into templikes(dr, be)
   select drinker, beer from likes""",
"""create index tdindex on templikes(dr)""",
"""create index tbindex on templikes(be)""",
"""select * from templikes""",
"""delete from templikes where be='rollingrock' """,
"""select * from templikes""",
"""update templikes set dr=dr+'an' where dr='norm' """,
"""drop index tdindex""",
"""delete from templikes
   where dr=(select min(dr) from templikes)""",
"""insert into templikes (dr, be) 
   select max(dr), min(be) from templikes""",
"""select * from templikes""",
"""select * from frequents""",
"""update frequents 
   set perweek=(select max(perweek) 
                from frequents
                where drinker='norm')
   where drinker='woody'""",
"""select * from frequents""",
"""create view lazy as
   select drinker, sum(perweek) as wasted 
   from frequents
   group by drinker
   having sum(perweek)>4
   order by drinker""",
"""select * from lazy""",
"""drop view lazy""",
"""drop table templikes""",
]

trace_updates = [
"""drop index tdindex""",
]

rollback_queries = [
"""select * from likes""",
"""select * from frequents""",
"""select * from nondrinkers""",
"""select * from alldrinkers""",
"""select * from dummy""",
]
rollback_updates = [
"""create table dummy (nothing varchar)""",
"""insert into frequents(drinker, bar, perweek)
   values ('nobody', 'nobar', 0)""",
"""insert into likes(drinker, beer, perday)
   values ('wally', 'nobar', 0)""",
"""drop view alldrinkers""",
]
keep_updates = [
"""insert into frequents(drinker, bar, perweek)
   values ('peter', 'pans', 1)""",
"""create view alldrinkers as
    select drinker from frequents
    union
    select drinker from likes""",
]

def rollbacktest(directory):
    print "*" * 30
    print "*** recovery test ***"
    print; print; print
    import sys
    from gadfly import gadfly
    print "*** connecting"
    connect = gadfly("test", directory)
    cursor = connect.cursor()
    connect.autocheckpoint = 0
    print "*** executing updates to commit"
    for x in keep_updates:
        print x
        cursor.execute(x)
    connect.verbose=1
    print "*** COMMITTING OPERATIONS (connection set to verbose)"
    connect.commit()
    print "*** DUMP LOG"
    connect.dumplog()
    print; print "*** RUNNING OPS TO ROLL BACK"
    preresults = []
    for s in rollback_queries:
        print; print; print s
        try:
            cursor.execute(s)
            preresults.append(cursor.fetchall())
            print cursor.pp()
        except:
            d = sys.exc_type
            print "exception", d
            preresults.append(d)
    print; print "*** now updating with ops to rollback"
    for s in rollback_updates:
        print; print; print s
        cursor.execute(s)
    print; print; print "*** testing noncommitted results"
    for dummy in (1,2):
        postresults = []
        for s in rollback_queries:
            print s
            try:
                cursor.execute(s)
                postresults.append(cursor.fetchall())
                print cursor.pp()
            except:
                d = sys.exc_type
                print "*** exception", d
                postresults.append(d)
        if preresults==postresults:
            print "*** same results as before uncommitted updates"
        else:
            print "*** differing results from before uncommitted updates"
        if dummy==1:
            print; print "*** ROLLING BACK!"
            connect.rollback()
    print; print "*** EMULATING RECOVERY"
    for s in rollback_updates:
        print; print; print s
        cursor.execute(s)
    for dummy in (1,2):
        postresults = []
        for s in rollback_queries:
            print s
            try: 
                cursor.execute(s)
                postresults.append(cursor.fetchall())
                print cursor.pp()
            except:
                d = sys.exc_type
                print "*** exception", d
                postresults.append(d)
        if preresults==postresults:
            print "*** same results as before uncommitted updates"
        else:
            print "*** differing results from before uncommitted updates"
        if dummy==1:
            print "*** RESTART: DUMPLOG"
            connect.dumplog()
            print "*** RESTARTING (RECOVER FROM LOG, DISCARD UNCOMMITTED)"
            connect.restart()
    
def retest(directory): 
    print "*" * 30
    print "*** reconnect test"
    from gadfly import gadfly
    connect = gadfly("test", directory)
    cursor = connect.cursor()
    for s in updates:
        print; print
        print s
        if s in trace_updates:
            cursor.EVAL_DUMP = 1
        cursor.execute(s)
        cursor.EVAL_DUMP = 0
        print cursor.pp()
    #print; print "CONNECTION DATA BEFORE COMMIT"
    #connect.DUMP_ALL()
    c.commit()
    #print; print "CONNECTION DATA AFTER COMMIT"
    #connect.DUMP_ALL()
    connect.close()
    return connect
    
if __name__=="__main__":
    import sys
    import mx.ODBC.Windows
    from gadflyCursor import gadflyCursor
    from jetCursor import jetCursor
    from ocelotCursor import ocelotCursor
    from ssCursor import ssCursor
    from baseCursor import baseCursor
    from oracleCursor import oracleCursor
    import gadfly

    class testCursor(jetCursor):

        def execute(self, query, data=None):
            # self.description = None
            # return
            try:
                if data:
                    return self.cursor.execute(query, data)
                else:
                    return self.cursor.execute(query)
            except:
                print "*** DATABASE OPERATION ERROR ***"
                print "Exception data:\n%s\n(%s)" %(sys.exc_type, str(sys.exc_value).replace("[","\n["))
                sys.stdout.flush()

        def commit(self):
            pass

#    argv = sys.argv
#    if len(argv)<2:
#        print "USAGE: python %s <db_directory>"
#        print "  please provide a directory for test database!"
#    else:
#        directory = argv[1]
#        connect = gadfly.gadfly()
#        connect.startup("test", directory)
#        c = testcursor(connect.cursor())
#        test(c)

#    connect = mx.ODBC.Windows.connect("testORA", user="scott", password="tiger")
#    connect = mx.ODBC.Windows.connect("MQIS", user="SA")
    connect = mx.ODBC.Windows.connect("WebData")
#    c = testCursor(connect.cursor(), connect)
#    c = testCursor(baseCursor(None, None), None)
#    connect = mx.ODBC.Windows.connect("testOcelot")
    c = testCursor(connect.cursor(), connect)
    test(c, None)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -