from SQLGenerator import SQLGenerator try: # for Python < 2.3 True, False except NameError: True, False = 1, 0 class MySQLSQLGenerator(SQLGenerator): def sqlSupportsDefaultValues(self): return True class Klasses: def dropDatabaseSQL(self, dbName): return 'drop database if exists %s;\n' % dbName def dropTablesSQL(self): sql = [] names = self.auxiliaryTableNames()[:] names.reverse() for tableName in names: sql.append('drop table if exists %s;\n' % tableName) klasses = self._model._allKlassesInOrder[:] klasses.reverse() for klass in klasses: sql.append('drop table if exists %s;\n' % klass.name()) sql.append('\n') return ''.join(sql) def createDatabaseSQL(self, dbName): return 'create database %s;\n' % dbName def useDatabaseSQL(self, dbName): return 'use %s;\n\n' % dbName def listTablesSQL(self): return 'show tables\n\n' class Klass: def writePostCreateTable(self, generator, out): start = self.setting('StartingSerialNum', None) if start: out.write('alter table %s auto_increment=%s;\n' % (self.sqlTableName(), start)) def primaryKeySQLDef(self, generator): return ' %s int not null primary key auto_increment,\n' % self.sqlSerialColumnName().ljust(self.maxNameWidth()) def writeIndexSQLDefsInTable(self, wr): for attr in self.allAttrs(): if attr.boolForKey('isIndexed') and attr.hasSQLColumn(): wr(',\n') wr('\tindex (%s)' % attr.sqlName()) wr('\n') class EnumAttr: def nativeEnumSQLType(self): enums = ['"%s"' % enum for enum in self.enums()] enums = ', '.join(enums) enums = 'enum(%s)' % enums return enums class StringAttr: def sqlType(self): # @@ 2000-11-11 ce: cache this if not self.get('Max', None): return 'varchar(100) /* WARNING: NO LENGTH SPECIFIED */' max = int(self['Max']) # @@ 2000-11-12 ce: won't need int() after using types if max > 65535: return 'longtext' if max > 255: return 'text' if self.has_key('Min') and self['Min'] and int(self['Min']) == max: return 'char(%s)' % max else: return 'varchar(%s)' % max class ObjRefAttr: def sqlType(self): if self.setting('UseBigIntObjRefColumns', False): return 'bigint unsigned /* %s */' % self['Type'] else: return 'int unsigned'