quotes field and tablenames in mysql, thanks Toomim
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.00.0 (2012-07-04 17:05:24) dev
|
Version 2.00.0 (2012-07-04 17:37:46) dev
|
||||||
|
|||||||
+34
-27
@@ -619,6 +619,9 @@ class BaseAdapter(ConnectionPool):
|
|||||||
def trigger_name(self,tablename):
|
def trigger_name(self,tablename):
|
||||||
return '%s_sequence' % tablename
|
return '%s_sequence' % tablename
|
||||||
|
|
||||||
|
def varquote(self,name):
|
||||||
|
return name
|
||||||
|
|
||||||
def create_table(self, table,
|
def create_table(self, table,
|
||||||
migrate=True,
|
migrate=True,
|
||||||
fake_migrate=False,
|
fake_migrate=False,
|
||||||
@@ -661,24 +664,24 @@ class BaseAdapter(ConnectionPool):
|
|||||||
TFK[rtablename] = {}
|
TFK[rtablename] = {}
|
||||||
TFK[rtablename][rfieldname] = field.name
|
TFK[rtablename][rfieldname] = field.name
|
||||||
else:
|
else:
|
||||||
ftype = ftype + self.types['reference FK'] \
|
ftype = ftype + self.types['reference FK'] % dict(
|
||||||
% dict(
|
constraint_name = constraint_name, # should be quoted
|
||||||
constraint_name=constraint_name,
|
table_name=self.varquote(tablename),
|
||||||
table_name=tablename,
|
field_name=self.varquote(field.name),
|
||||||
field_name=field.name,
|
foreign_key = '%s (%s)' % (self.varquote(rtablename),
|
||||||
foreign_key='%s (%s)'%(rtablename, rfieldname),
|
self.varquote(rfieldname)),
|
||||||
on_delete_action=field.ondelete)
|
on_delete_action=field.ondelete)
|
||||||
else:
|
else:
|
||||||
# make a guess here for circular references
|
# make a guess here for circular references
|
||||||
id_fieldname = referenced in table._db \
|
id_fieldname = referenced in table._db \
|
||||||
and table._db[referenced]._id.name or 'id'
|
and table._db[referenced]._id.name or 'id'
|
||||||
ftype = self.types[field.type[:9]] % \
|
ftype = self.types[field.type[:9]] % dict(
|
||||||
dict(table_name=tablename,
|
index_name = self.varquote(tablename+'__idx'),
|
||||||
field_name=field.name,
|
field_name = self.varquote(field.name),
|
||||||
constraint_name=constraint_name,
|
constraint_name = self.varquote(constraint_name),
|
||||||
foreign_key=referenced + \
|
foreign_key = '%s (%s)' % (self.varquote(referenced),
|
||||||
('(%s)' % id_fieldname),
|
self.varquote(id_fieldname)),
|
||||||
on_delete_action=field.ondelete)
|
on_delete_action=field.ondelete)
|
||||||
elif field.type.startswith('list:reference'):
|
elif field.type.startswith('list:reference'):
|
||||||
ftype = self.types[field.type[:14]]
|
ftype = self.types[field.type[:14]]
|
||||||
elif field.type.startswith('decimal'):
|
elif field.type.startswith('decimal'):
|
||||||
@@ -737,13 +740,13 @@ class BaseAdapter(ConnectionPool):
|
|||||||
# Postgres - PostGIS:
|
# Postgres - PostGIS:
|
||||||
# geometry fields are added after the table has been created, not now
|
# geometry fields are added after the table has been created, not now
|
||||||
if not (self.dbengine == 'postgres' and field.type.startswith('geom')):
|
if not (self.dbengine == 'postgres' and field.type.startswith('geom')):
|
||||||
fields.append('%s %s' %(field.name, ftype))
|
fields.append('%s %s' % (self.varquote(field.name), ftype))
|
||||||
other = ';'
|
other = ';'
|
||||||
|
|
||||||
# backend-specific extensions to fields
|
# backend-specific extensions to fields
|
||||||
if self.dbengine == 'mysql':
|
if self.dbengine == 'mysql':
|
||||||
if not hasattr(table, "_primarykey"):
|
if not hasattr(table, "_primarykey"):
|
||||||
fields.append('PRIMARY KEY(%s)' % table._id.name)
|
fields.append('PRIMARY KEY(%s)' % self.varquote(table._id.name))
|
||||||
other = ' ENGINE=InnoDB CHARACTER SET utf8;'
|
other = ' ENGINE=InnoDB CHARACTER SET utf8;'
|
||||||
|
|
||||||
fields = ',\n '.join(fields)
|
fields = ',\n '.join(fields)
|
||||||
@@ -752,12 +755,12 @@ class BaseAdapter(ConnectionPool):
|
|||||||
pkeys = table._db[rtablename]._primarykey
|
pkeys = table._db[rtablename]._primarykey
|
||||||
fkeys = [ rfields[k] for k in pkeys ]
|
fkeys = [ rfields[k] for k in pkeys ]
|
||||||
fields = fields + ',\n ' + \
|
fields = fields + ',\n ' + \
|
||||||
self.types['reference TFK'] %\
|
self.types['reference TFK'] % dict(
|
||||||
dict(table_name=tablename,
|
table_name = tablename,
|
||||||
field_name=', '.join(fkeys),
|
field_name=', '.join(fkeys),
|
||||||
foreign_table=rtablename,
|
foreign_table = rtablename,
|
||||||
foreign_key=', '.join(pkeys),
|
foreign_key = ', '.join(pkeys),
|
||||||
on_delete_action=field.ondelete)
|
on_delete_action = field.ondelete)
|
||||||
|
|
||||||
if hasattr(table,'_primarykey'):
|
if hasattr(table,'_primarykey'):
|
||||||
query = '''CREATE TABLE %s(\n %s,\n %s) %s''' % \
|
query = '''CREATE TABLE %s(\n %s,\n %s) %s''' % \
|
||||||
@@ -1005,7 +1008,7 @@ class BaseAdapter(ConnectionPool):
|
|||||||
logfile.write('success!\n')
|
logfile.write('success!\n')
|
||||||
|
|
||||||
def _insert(self, table, fields):
|
def _insert(self, table, fields):
|
||||||
keys = ','.join(f.name for f,v in fields)
|
keys = ','.join(self.varquote(f.name) for f,v in fields)
|
||||||
values = ','.join(self.expand(v,f.type) for f,v in fields)
|
values = ','.join(self.expand(v,f.type) for f,v in fields)
|
||||||
return 'INSERT INTO %s(%s) VALUES (%s);' % (table, keys, values)
|
return 'INSERT INTO %s(%s) VALUES (%s);' % (table, keys, values)
|
||||||
|
|
||||||
@@ -2030,14 +2033,17 @@ class MySQLAdapter(BaseAdapter):
|
|||||||
'time': 'TIME',
|
'time': 'TIME',
|
||||||
'datetime': 'DATETIME',
|
'datetime': 'DATETIME',
|
||||||
'id': 'INT AUTO_INCREMENT NOT NULL',
|
'id': 'INT AUTO_INCREMENT NOT NULL',
|
||||||
'reference': 'INT, INDEX %(field_name)s__idx (%(field_name)s), FOREIGN KEY (%(field_name)s) REFERENCES %(foreign_key)s ON DELETE %(on_delete_action)s',
|
'reference': 'INT, INDEX %(index_name)s (%(field_name)s), FOREIGN KEY (%(field_name)s) REFERENCES %(foreign_key)s ON DELETE %(on_delete_action)s',
|
||||||
'list:integer': 'LONGTEXT',
|
'list:integer': 'LONGTEXT',
|
||||||
'list:string': 'LONGTEXT',
|
'list:string': 'LONGTEXT',
|
||||||
'list:reference': 'LONGTEXT',
|
'list:reference': 'LONGTEXT',
|
||||||
'big-id': 'BIGINT AUTO_INCREMENT NOT NULL',
|
'big-id': 'BIGINT AUTO_INCREMENT NOT NULL',
|
||||||
'big-reference': 'BIGINT, INDEX %(field_name)s__idx (%(field_name)s), FOREIGN KEY (%(field_name)s) REFERENCES %(foreign_key)s ON DELETE %(on_delete_action)s',
|
'big-reference': 'BIGINT, INDEX %(index_name)s (%(field_name)s), FOREIGN KEY (%(field_name)s) REFERENCES %(foreign_key)s ON DELETE %(on_delete_action)s',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def varquote(self,name):
|
||||||
|
return '`%`' % name
|
||||||
|
|
||||||
def RANDOM(self):
|
def RANDOM(self):
|
||||||
return 'RAND()'
|
return 'RAND()'
|
||||||
|
|
||||||
@@ -8144,10 +8150,11 @@ class Field(Expression):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
quote = self.db._adapter.varquote
|
||||||
try:
|
try:
|
||||||
return '%s.%s' % (self.tablename, self.name)
|
return '%s.%s' % (varquote(self.tablename), quote(self.name))
|
||||||
except:
|
except:
|
||||||
return '<no table>.%s' % self.name
|
return '<no table>.%s' % quote(self.name)
|
||||||
|
|
||||||
|
|
||||||
class Query(object):
|
class Query(object):
|
||||||
|
|||||||
Reference in New Issue
Block a user