fixed bugs in the postgresql-socket3 backend with list-tables and table-exists-p...
authorRuss Tyndall <russ@acceleration.net>
Mon, 14 Dec 2009 23:04:27 +0000 (18:04 -0500)
committerRuss Tyndall <russ@acceleration.net>
Mon, 14 Dec 2009 23:04:27 +0000 (18:04 -0500)
db-postgresql-socket3/sql.lisp
sql/fddl.lisp

index e2515005cb5cda828bd910484cb89d7d94e8dba2..548d2195743b9ee589421466d0c6ad3963c1c622 100644 (file)
 
 (defmethod read-sql-value (val (type (eql 'generalized-boolean)) (database postgresql-socket3-database) db-type)
   (declare (ignore database db-type))
-  val)
\ No newline at end of file
+  val)
+
+(defmethod clsql-sys::%table-exists-p (name (database postgresql-socket3-database) &key owner )
+  (unless database (setf database *default-database*))
+  (when (clsql:query (command-object "SELECT 1 FROM information_schema.tables WHERE table_name=$1 and ($2::text IS NULL or table_schema = $2::text)"
+                                    (list name owner))
+                    :flatp T
+                    :database database)
+    T))
+
+(defmethod database-list-tables ((database postgresql-socket3-database) &key owner)
+  (clsql:query (command-object "
+SELECT $1::Text as table_name
+UNION 
+SELECT table_name FROM information_schema.tables
+                                WHERE ($1::Text IS NULL or table_schema = $1::text)"
+                              (list (or owner :null)))
+              :flatp T
+              :database database))
index 47323c344612b8711e175fb3c2962fba88293a0f..0770dc5441ae268ff4d0899776908cd68b0f244a 100644 (file)
@@ -113,6 +113,13 @@ is a string denoting a user name, only tables owned by OWNER are
 listed. If OWNER is :all then all tables are listed."
   (database-list-tables database :owner owner))
 
+(defmethod %table-exists-p (name (database T) &key owner )
+  (unless database (setf database *default-database*))
+  (let ((name (database-identifier name database))
+       (tables (list-tables :owner owner :database database)))
+    (when (member name tables :test #'string-equal)
+      t)))
+
 (defun table-exists-p (name &key (owner nil) (database *default-database*))
   "Tests for the existence of an SQL table called NAME in DATABASE
 which defaults to *DEFAULT-DATABASE*. OWNER is nil by default
@@ -120,10 +127,7 @@ which means that only tables owned by users are examined. If
 OWNER is a string denoting a user name, only tables owned by
 OWNER are examined. If OWNER is :all then all tables are
 examined."
-  (when (member (database-identifier name database)
-                (list-tables :owner owner :database database)
-                :test #'string-equal)
-    t))
+  (%table-exists-p name database :owner owner))
 
 
 ;; Views