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        t = "INSERT INTO t (a, b) VALUES ("
25        l = random.randint(1, 32)
26        s = ''.join(random.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits) for x in range(l))
27        t += "'%s'," % (s)
28        l = random.randint(1, 260)
29        s = ''.join(random.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits) for x in range(l))
30        t += "'%s');" % (s)
31        if len(s) > 255:
32            print "--error ER_DATA_TOO_LONG"
33        print t
34
35    print "CREATE TABLE ti LIKE t;"
36    print "ALTER TABLE ti ENGINE=myisam;"
37    print "INSERT INTO ti SELECT * FROM t;"
38
39    for i in range(len(blob_types)):
40        print "ALTER TABLE t CHANGE COLUMN a a %s %s;" % (blob_types[i], nn)
41        print "ALTER TABLE ti CHANGE COLUMN a a %s %s;" % (blob_types[i], nn)
42    for i in range(len(blob_types)):
43        print "ALTER TABLE t CHANGE COLUMN b b %s %s;" % (blob_types[i], nn)
44        print "ALTER TABLE ti CHANGE COLUMN b b %s %s;" % (blob_types[i], nn)
45    # compare tables
46    print "let $diff_tables = test.t, test.ti;"
47    print "source include/diff_tables.inc;"
48    print "DROP TABLE t, ti;"
49def gen_table(f, v, nn):
50    t = "CREATE TABLE t ("
51    if f != "":
52        t += "%s, " % (f)
53    if v != "":
54        t += "%s, " % (v)
55    t += "a TINYBLOB %s, b TINYBLOB %s);" % (nn, nn)
56    return t
57def insert_row(t):
58    t = "INSERT INTO %s (a, b) VALUES (" % (t)
59    l = random.randint(1, 32)
60    s = ''.join(random.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits) for x in range(l))
61    t += "'%s'," % (s)
62    l = random.randint(1, 260)
63    s = ''.join(random.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits) for x in range(l))
64    t += "'%s');" % (s)
65    return t
66
67sys.exit(main())
68