X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=db-postgresql-socket3%2Fsql.lisp;h=7f545c80ee63eb4124ed9eb07ff9a53199286e8d;hb=9347205f5d899b30b8bb4429bf47ae59709c14d7;hp=8428d481f08a3d0570d652d9b17d00a1089c7c57;hpb=09a2bc41215abb9dd9c92db6cb70e04fa845f938;p=clsql.git diff --git a/db-postgresql-socket3/sql.lisp b/db-postgresql-socket3/sql.lisp index 8428d48..7f545c8 100644 --- a/db-postgresql-socket3/sql.lisp +++ b/db-postgresql-socket3/sql.lisp @@ -155,6 +155,10 @@ (cl-postgres:close-database (database-connection database)) t) +(defmethod clsql-sys::release-to-conn-pool :before ((conn postgresql-socket3-database)) + ;; This resets the connection to "New" state + (database-execute-command "DISCARD ALL;" conn)) + (defvar *include-field-names* nil) @@ -232,7 +236,25 @@ ((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 @@ -311,4 +333,20 @@ (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 table_name FROM information_schema.tables + WHERE ($1::Text IS NULL or table_schema = $1::text)" + (list (or owner :null))) + :flatp T + :database database))