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