]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
auto-commit after LOAD DATA INFILE for mysql
authorJason Kirtland <jek@discorporate.us>
Sun, 12 Aug 2007 22:05:30 +0000 (22:05 +0000)
committerJason Kirtland <jek@discorporate.us>
Sun, 12 Aug 2007 22:05:30 +0000 (22:05 +0000)
caught a couple more uncompiled regexps

lib/sqlalchemy/databases/mysql.py
lib/sqlalchemy/databases/sqlite.py
lib/sqlalchemy/engine/default.py

index 5aebac09bfa09de94d0a7e21ae406fa233f0bab5..6f8b8318991ab6a2864729a23c56b984b07033a5 100644 (file)
@@ -183,6 +183,12 @@ RESERVED_WORDS = util.Set(
      'read_only', 'read_write', # 5.1
      ])
 
+AUTOCOMMIT_RE = re.compile(
+    r'\s*(?:UPDATE|INSERT|CREATE|DELETE|DROP|ALTER|LOAD +DATA)',
+    re.I | re.UNICODE)
+SELECT_RE = re.compile(
+    r'\s*(?:SELECT|SHOW|DESCRIBE|XA RECOVER)',
+    re.I | re.UNICODE)
 
 class _NumericType(object):
     """Base for MySQL numeric types."""
@@ -1274,7 +1280,7 @@ def descriptor():
 
 
 class MySQLExecutionContext(default.DefaultExecutionContext):
-    _my_is_select = re.compile(r'\s*(?:SELECT|SHOW|DESCRIBE|XA RECOVER)',
+    _my_is_select = re.compile(r'\s*(?:SELECT|SHOW|DESCRIBE|XA +RECOVER)',
                                re.I | re.UNICODE)
 
     def post_exec(self):
@@ -1285,7 +1291,10 @@ class MySQLExecutionContext(default.DefaultExecutionContext):
                                            self._last_inserted_ids[1:])
             
     def is_select(self):
-        return self._my_is_select.match(self.statement) is not None
+        return SELECT_RE.match(self.statement)
+
+    def should_autocommit(self):
+        return AUTOCOMMIT_RE.match(self.statement)
 
 
 class MySQLDialect(ansisql.ANSIDialect):
index 15f6a2065cf11c16a18ef9ca079979d2244d932d..7999cc40330ba5ef78849047f974973b97a03683 100644 (file)
@@ -13,6 +13,8 @@ import sqlalchemy.types as sqltypes
 import datetime,time, warnings
 import sqlalchemy.util as util
 
+
+SELECT_REGEXP = re.compile(r'\s*(?:SELECT|PRAGMA)', re.I | re.UNICODE)
     
 class SLNumeric(sqltypes.Numeric):
     def get_col_spec(self):
@@ -153,7 +155,7 @@ class SQLiteExecutionContext(default.DefaultExecutionContext):
                 self._last_inserted_ids = [self.cursor.lastrowid] + self._last_inserted_ids[1:]
 
     def is_select(self):
-        return re.match(r'SELECT|PRAGMA', self.statement.lstrip(), re.I) is not None
+        return SELECT_REGEXP.match(self.statement)
         
 class SQLiteDialect(ansisql.ANSIDialect):
     
index badd86134aebc4e7e9702e96efd0a8693e2860aa..c71a40fa33553cbe051b7fa8085511b248cfd2fa 100644 (file)
@@ -11,7 +11,9 @@ import sys, re, random
 from sqlalchemy.engine import base
 
 
-AUTOCOMMIT_REGEXP = re.compile(r'UPDATE|INSERT|CREATE|DELETE|DROP|ALTER', re.I)
+AUTOCOMMIT_REGEXP = re.compile(r'\s*(?:UPDATE|INSERT|CREATE|DELETE|DROP|ALTER)',
+                               re.I | re.UNICODE)
+SELECT_REGEXP = re.compile(r'\s*SELECT', re.I | re.UNICODE)
 
 class DefaultDialect(base.Dialect):
     """Default implementation of Dialect"""
@@ -225,7 +227,7 @@ class DefaultExecutionContext(base.ExecutionContext):
     def is_select(self):
         """return TRUE if the statement is expected to have result rows."""
         
-        return re.match(r'SELECT', self.statement.lstrip(), re.I) is not None
+        return SELECT_REGEXP.match(self.statement)
 
     def create_cursor(self):
         return self._connection.connection.cursor()
@@ -240,7 +242,7 @@ class DefaultExecutionContext(base.ExecutionContext):
         return self.get_result_proxy()
 
     def should_autocommit(self):
-        return AUTOCOMMIT_REGEXP.match(self.statement.lstrip())
+        return AUTOCOMMIT_REGEXP.match(self.statement)
             
     def pre_exec(self):
         self._process_defaults()