;;; Object listing
-(defmethod database-list-objects-of-type ((database postgresql-socket-database)
- type owner)
- (let ((owner-clause
- (cond ((stringp owner)
- (format nil " AND (relowner=(SELECT usesysid FROM pg_user WHERE (usename='~A')))" owner))
- ((null owner)
- (format nil " AND (NOT (relowner=1))"))
- (t ""))))
- (mapcar #'car
- (database-query
- (format nil
- "SELECT relname FROM pg_class WHERE (relkind = '~A')~A"
- type
- owner-clause)
- database nil))))
-
+(defun owner-clause (owner)
+ (cond
+ ((stringp owner)
+ (format
+ nil
+ " AND (relowner=(SELECT usesysid FROM pg_user WHERE (usename='~A')))"
+ owner))
+ ((null owner)
+ (format nil " AND (NOT (relowner=1))"))
+ (t "")))
+
+(defun database-list-objects-of-type (database type owner)
+ (mapcar #'car
+ (database-query
+ (format nil
+ "SELECT relname FROM pg_class WHERE (relkind = '~A')~A"
+ type
+ (owner-clause owner))
+ database nil)))
+
(defmethod database-list-tables ((database postgresql-socket-database)
&key (owner nil))
(database-list-objects-of-type database "r" owner))
(defmethod database-list-indexes ((database postgresql-socket-database)
&key (owner nil))
(database-list-objects-of-type database "i" owner))
-
+
+(defmethod database-list-table-indexes (table
+ (database postgresql-socket-database)
+ &key (owner nil))
+ (let ((indexrelids
+ (database-query
+ (format
+ nil
+ "select indexrelid from pg_index where indrelid=(select relfilenode from pg_class where relname='~A'~A)"
+ (string-downcase table)
+ (owner-clause owner))
+ database :auto))
+ (result nil))
+ (dolist (indexrelid indexrelids (nreverse result))
+ (push
+ (caar (database-query
+ (format nil "select relname from pg_class where relfilenode='~A'"
+ (car indexrelid))
+ database
+ nil))
+ result))))
+
(defmethod database-list-attributes ((table string)
(database postgresql-socket-database)
&key (owner nil))
(sql-escape (string-downcase table)))
database :auto))
+
+;; Database capabilities
+
+(defmethod db-backend-has-create/destroy-db? ((db-type (eql :postgresql-socket)))
+ nil)
+
+(defmethod db-type-has-fancy-math? ((db-type (eql :postgresql-socket)))
+ t)
+
+(defmethod db-type-default-case ((db-type (eql :postgresql)))
+ :lower)
+
(when (clsql-base-sys:database-type-library-loaded :postgresql-socket)
(clsql-base-sys:initialize-database-type :database-type :postgresql-socket))