r9113: intial changes for list-table-indexes
[clsql.git] / db-odbc / odbc-api.lisp
index c032fd3ce6fd7ee6c9295444d1b1afc9be4756c6..5ff3d09cb7f4750e32cedaf68fb1e45fb083eae9 100644 (file)
@@ -940,6 +940,20 @@ as possible second argument) to the desired representation of date/time/timestam
   (with-error-handling (:hstmt hstmt)
     (SQLTables hstmt +null-ptr+ 0 +null-ptr+ 0 +null-ptr+ 0 +null-ptr+ 0)))
 
+(defun %table-statistics (table hstmt &key unique (ensure t))
+  (with-cstrings ((table-cs table))
+    (with-error-handling (:hstmt hstmt)
+      (print hstmt)
+      (print table-cs)
+      (print (uffi:convert-from-cstring table-cs))
+      (SQLStatistics 
+       hstmt
+       +null-ptr+ 0
+       +null-ptr+ 0
+       table-cs (length table) ;;$SQL_NTS
+       (if unique $SQL_INDEX_UNIQUE $SQL_INDEX_ALL)
+       (if ensure $SQL_ENSURE $SQL_QUICK)))))
+
 (defun %list-data-sources (henv)
   (let ((dsn (allocate-foreign-string (1+ $SQL_MAX_DSN_LENGTH)))
        (desc (allocate-foreign-string 256))
@@ -947,26 +961,27 @@ as possible second argument) to the desired representation of date/time/timestam
     (unwind-protect
         (with-foreign-objects ((dsn-len :short)
                                (desc-len :short))
-          (with-error-handling (:henv henv)
-            (let ((res
-                   (SQLDataSources henv $SQL_FETCH_FIRST dsn
-                                   (1+ $SQL_MAX_DSN_LENGTH)
-                                   dsn-len desc 256 desc-len)))
-              (when (or (eql res $SQL_SUCCESS)
-                        (eql res $SQL_SUCCESS_WITH_INFO))
-                (push (convert-from-foreign-string dsn) results))
-
-              (do ((res (SQLDataSources henv $SQL_FETCH_NEXT dsn
+          (let ((res (with-error-handling (:henv henv)
+                       (SQLDataSources henv $SQL_FETCH_FIRST dsn
+                                       (1+ $SQL_MAX_DSN_LENGTH)
+                                       dsn-len desc 256 desc-len))))
+            (when (or (eql res $SQL_SUCCESS)
+                      (eql res $SQL_SUCCESS_WITH_INFO))
+              (push (convert-from-foreign-string dsn) results))
+            
+            (do ((res (with-error-handling (:henv henv)
+                        (SQLDataSources henv $SQL_FETCH_NEXT dsn
                                         (1+ $SQL_MAX_DSN_LENGTH)
-                                        dsn-len desc 256 desc-len)
+                                        dsn-len desc 256 desc-len))
+                      (with-error-handling (:henv henv)
                         (SQLDataSources henv $SQL_FETCH_NEXT dsn
                                         (1+ $SQL_MAX_DSN_LENGTH)
-                                        dsn-len desc 256 desc-len)))
-                  ((not (or (eql res $SQL_SUCCESS)
-                            (eql res $SQL_SUCCESS_WITH_INFO))))
-                (push (convert-from-foreign-string dsn) results)))))
+                                        dsn-len desc 256 desc-len))))
+                ((not (or (eql res $SQL_SUCCESS)
+                          (eql res $SQL_SUCCESS_WITH_INFO))))
+              (push (convert-from-foreign-string dsn) results))))
       (progn
        (free-foreign-object dsn)
        (free-foreign-object desc)))
     (nreverse results)))
-               
+