((expression string) (database postgresql-socket3-database))
(let ((connection (database-connection database)))
(with-postgresql-handlers (database expression)
- (cl-postgres:exec-query connection expression))))
+ ;; return row count?
+ (second (multiple-value-list (cl-postgres:exec-query connection expression))))))
+
+(defmethod execute-command ((obj command-object)
+ &key (database *default-database*))
+ (clsql-sys::record-sql-command (expression obj) database)
+ (let ((res (database-execute-command obj database)))
+ (clsql-sys::record-sql-result res database)
+ ;; return row count?
+ res))
+
+(defmethod database-execute-command
+ ((obj command-object) (database postgresql-socket3-database))
+ (let ((connection (database-connection database)))
+ (with-postgresql-handlers (database obj)
+ (unless (has-been-prepared obj)
+ (cl-postgres:prepare-query connection (prepared-name obj) (expression obj))
+ (setf (has-been-prepared obj) T))
+ (second (multiple-value-list (cl-postgres:exec-prepared connection (prepared-name obj) (parameters obj)))))))
;;;; Cursoring interface
(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))