]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
exceptions added
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 19 Feb 2006 00:26:22 +0000 (00:26 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 19 Feb 2006 00:26:22 +0000 (00:26 +0000)
postgres last_inserted_ids will raise an error unless OID's are turned on
(INSERT with PK defaults + no OIDs wont fail unless this method is called)

lib/sqlalchemy/databases/information_schema.py
lib/sqlalchemy/databases/postgres.py
lib/sqlalchemy/databases/sqlite.py

index eb0863100a4370de0fe1db99813e350a214fc07d..825e0017a804bca03e763847e68e83e78e2c4b12 100644 (file)
@@ -3,6 +3,7 @@ import sqlalchemy.engine as engine
 import sqlalchemy.schema as schema
 import sqlalchemy.ansisql as ansisql
 import sqlalchemy.types as sqltypes
+from sqlalchemy.exceptions import *
 from sqlalchemy import *
 from sqlalchemy.ansisql import *
 
@@ -70,7 +71,7 @@ class ISchema(object):
             try:
                 gen_tbl = globals()['gen_'+name]
             except KeyError:
-                raise AttributeError('information_schema table %s not found' % name)
+                raise ArgumentError('information_schema table %s not found' % name)
             self.cache[name] = gen_tbl.toengine(self.engine)
         return self.cache[name]
 
index a5b5b250dc20dfd6c4d7288e4fe3218e97846e8f..011dcfd2ab597eb6c919bb965eaa19b1f10822a6 100644 (file)
@@ -11,8 +11,9 @@ import sqlalchemy.engine as engine
 import sqlalchemy.schema as schema
 import sqlalchemy.ansisql as ansisql
 import sqlalchemy.types as sqltypes
+from sqlalchemy.exceptions import *
 from sqlalchemy import *
-import sqlalchemy.databases.information_schema as ischema
+import information_schema as ischema
 
 try:
     import psycopg2 as psycopg
@@ -156,7 +157,7 @@ class PGSQLEngine(ansisql.ANSISQLEngine):
         self.use_oids = use_oids
         if module is None:
             if psycopg is None:
-                raise "Couldnt locate psycopg1 or psycopg2: specify postgres module argument"
+                raise ArgumentError("Couldnt locate psycopg1 or psycopg2: specify postgres module argument")
             self.module = psycopg
         else:
             self.module = module
@@ -186,9 +187,6 @@ class PGSQLEngine(ansisql.ANSISQLEngine):
         else:
             return sqltypes.adapt_type(typeobj, pg1_colspecs)
 
-    def last_inserted_ids(self):
-        return self.context.last_inserted_ids
-
     def compiler(self, statement, bindparams, **kwargs):
         return PGCompiler(self, statement, bindparams, **kwargs)
 
@@ -207,7 +205,10 @@ class PGSQLEngine(ansisql.ANSISQLEngine):
         return self._default_schema_name
         
     def last_inserted_ids(self):
-        return self.context.last_inserted_ids
+        if self.context.last_inserted_ids is None:
+            raise InvalidRequestError("no INSERT executed, or cant use cursor.lastrowid without Postgres OIDs enabled")
+        else:
+            return self.context.last_inserted_ids
 
     def oid_column_name(self):
         if self.use_oids:
@@ -221,7 +222,8 @@ class PGSQLEngine(ansisql.ANSISQLEngine):
     def post_exec(self, proxy, compiled, parameters, **kwargs):
         if getattr(compiled, "isinsert", False) and self.context.last_inserted_ids is None:
             if not self.use_oids:
-                raise "cant use cursor.lastrowid without OIDs enabled"
+                pass
+                # will raise invalid error when they go to get them
             else:
                 table = compiled.statement.table
                 cursor = proxy()
index b0101c3f22b3b3cf5ede1473e2d68b0e6b1f0fe8..240773043c46f25e5cf0451144e0d240f6811bde 100644 (file)
@@ -12,6 +12,7 @@ import sqlalchemy.engine as engine
 import sqlalchemy.schema as schema
 import sqlalchemy.ansisql as ansisql
 import sqlalchemy.types as sqltypes
+from sqlalchemy.exceptions import *
 from sqlalchemy.ansisql import *
 import datetime,time
 
@@ -123,7 +124,7 @@ def descriptor():
 class SQLiteSQLEngine(ansisql.ANSISQLEngine):
     def __init__(self, opts, **params):
         if sqlite is None:
-            raise "Couldn't import pysqlite2"
+            raise ArgumentError("Couldn't import sqlite or pysqlite2")
         self.filename = opts.pop('filename', ':memory:')
         self.opts = opts or {}
         params['poolclass'] = sqlalchemy.pool.SingletonThreadPool