1import sys
2import random
3import string
4def main():
5    print "# this test is generated by change_column_blob_data.py"
6    print "# generate hot blob expansion test cases"
7    print "source include/have_tokudb.inc;"
8    print "--disable_warnings"
9    print "DROP TABLE IF EXISTS t, ti;"
10    print "--enable_warnings"
11    print "SET SESSION DEFAULT_STORAGE_ENGINE=\"TokuDB\";"
12    print "SET SESSION TOKUDB_DISABLE_SLOW_ALTER=1;"
13    for f in [ "", "f INT DEFAULT 0", "f INT DEFAULT 0 NOT NULL" ]:
14        for v in [ "", "v VARCHAR(32) DEFAULT ''", "v VARCHAR(32) DEFAULT '' NOT NULL" ]:
15            for nn in [ "", "NOT NULL" ]:
16                gen_test(f, v, nn)
17    return 0
18def gen_test(f, v, nn):
19    blob_types = [ "TINYBLOB", "BLOB", "MEDIUMBLOB", "LONGBLOB" ]
20
21    print gen_table(f, v, nn)
22
23    for r in range(3):
24        print insert_row("t")
25
26    print "CREATE TABLE ti LIKE t;"
27    print "ALTER TABLE ti ENGINE=myisam;"
28    print "INSERT INTO ti SELECT * FROM t;"
29
30    for i in range(len(blob_types)):
31        print "ALTER TABLE t CHANGE COLUMN a a %s %s;" % (blob_types[i], nn)
32        print "ALTER TABLE ti CHANGE COLUMN a a %s %s;" % (blob_types[i], nn)
33    for i in range(len(blob_types)):
34        print "ALTER TABLE t CHANGE COLUMN b b %s %s;" % (blob_types[i], nn)
35        print "ALTER TABLE ti CHANGE COLUMN b b %s %s;" % (blob_types[i], nn)
36    # compare tables
37    print "let $diff_tables = test.t, test.ti;"
38    print "source include/diff_tables.inc;"
39    print "DROP TABLE t, ti;"
40def gen_table(f, v, nn):
41    t = "CREATE TABLE t ("
42    if f != "":
43        t += "%s, " % (f)
44    if v != "":
45        t += "%s, " % (v)
46    t += "a TINYBLOB %s, b TINYBLOB %s);" % (nn, nn)
47    return t
48def insert_row(t):
49    t = "INSERT INTO %s (a, b) VALUES (" % (t)
50    l = random.randint(1, 32)
51    s = ''.join(random.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits) for x in range(l))
52    t += "'%s'," % (s)
53    l = random.randint(1, 260)
54    s = ''.join(random.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits) for x in range(l))
55    t += "'%s');" % (s)
56    return t
57
58sys.exit(main())
59