]> granicus.if.org Git - postgresql/commitdiff
1) Not export ODBC 3.0 functions.
authorHiroshi Inoue <inoue@tpf.co.jp>
Thu, 13 Sep 2001 00:27:11 +0000 (00:27 +0000)
committerHiroshi Inoue <inoue@tpf.co.jp>
Thu, 13 Sep 2001 00:27:11 +0000 (00:27 +0000)
2) (Maybe) fix a bug reported by Mika Muntila.

src/interfaces/odbc/convert.c
src/interfaces/odbc/drvconn.c
src/interfaces/odbc/environ.c
src/interfaces/odbc/info.c
src/interfaces/odbc/pgtypes.c
src/interfaces/odbc/psqlodbc_win32.def

index 8052709fdac3c50e7e5ce31b2a89558203fb368f..84f99b40e3e06f7934b4661107de843709c3dfc9 100644 (file)
@@ -1674,12 +1674,19 @@ copy_statement_with_parameters(StatementClass *stmt)
 
                                if (buf)
                                {
-                                       CVT_APPEND_DATA(buf, used);
+                                       switch (used)
+                                       {
+                                               case SQL_NULL_DATA:
+                                                       break;
+                                               case SQL_NTS:
+                                                       CVT_APPEND_STR(buf);
+                                                       break;
+                                               default:
+                                                       CVT_APPEND_DATA(buf, used);
+                                       }
                                }
                                else
-                               {
                                        CVT_APPEND_STR(param_string);
-                               }
 
                                if (param_sqltype == SQL_BIT)
                                        CVT_APPEND_CHAR('\'');          /* Close Quote */
index e1eee25de553b4a099b32e8b103ec4c2d48a7e6e..80f1d69b7d649602581ab4dfd68899cb2e7816bf 100644 (file)
@@ -230,6 +230,9 @@ dialog:
 
                if (len >= cbConnStrOutMax)
                {
+                       int     clen;
+                       for (clen = strlen(szConnStrOut) - 1; clen >= 0 && szConnStrOut[clen] != ';'; clen--)
+                               szConnStrOut[clen] = '\0';
                        result = SQL_SUCCESS_WITH_INFO;
                        conn->errornumber = CONN_TRUNCATED;
                        conn->errormsg = "The buffer was too small for the ConnStrOut.";
index 8e9156d2d0c61328761c8eb9a22a90f94d3c7914..0471e1f42841c22ff1bbd0dab3f4de55e01dac0c 100644 (file)
@@ -92,6 +92,8 @@ PGAPI_Error(
 {
        char       *msg;
        int                     status;
+       BOOL    once_again = FALSE;
+       SWORD   msglen;
 
        mylog("**** PGAPI_Error: henv=%u, hdbc=%u, hstmt=%u <%d>\n", henv, hdbc, hstmt, cbErrorMsgMax);
 
@@ -101,8 +103,6 @@ PGAPI_Error(
        {
                /* CC: return an error of a hstmt  */
                StatementClass *stmt = (StatementClass *) hstmt;
-               SWORD   msglen;
-               BOOL    once_again = FALSE;
 
                if (SC_get_error(stmt, &status, &msg))
                {
@@ -306,8 +306,15 @@ PGAPI_Error(
                                return SQL_NO_DATA_FOUND;
                        }
 
+                       msglen = strlen(msg);
                        if (NULL != pcbErrorMsg)
-                               *pcbErrorMsg = (SWORD) strlen(msg);
+                       {
+                               *pcbErrorMsg = msglen;
+                               if (cbErrorMsgMax == 0)
+                                       once_again = TRUE;
+                               else if (msglen >= cbErrorMsgMax)
+                                       *pcbErrorMsg = cbErrorMsgMax - 1;
+                       }
                        if ((NULL != szErrorMsg) && (cbErrorMsgMax > 0))
                                strncpy_null(szErrorMsg, msg, cbErrorMsgMax);
                        if (NULL != pfNativeError)
@@ -391,7 +398,13 @@ PGAPI_Error(
                        return SQL_NO_DATA_FOUND;
                }
 
-               return SQL_SUCCESS;
+               if (once_again)
+               {
+                       conn->errornumber = status;
+                       return SQL_SUCCESS_WITH_INFO;
+               }
+               else
+                       return SQL_SUCCESS;
        }
        else if (SQL_NULL_HENV != henv)
        {
index 1f458ba043ead93c2fb3d54130ae20be9a7f4f27..54d97304bc317ea50171971ae0388e395e65f144 100644 (file)
@@ -3614,9 +3614,29 @@ PGAPI_Procedures(
                          SWORD cbProcName)
 {
        static char *func = "PGAPI_Procedures";
+       StatementClass  *stmt = (StatementClass *) hstmt;
+       Int2            result_cols;
 
        mylog("%s: entering...\n", func);
 
+       /*
+       * a statement is actually executed, so we'll have to do this
+       * ourselves.
+       */
+       result_cols = 8;
+       extend_bindings(stmt, result_cols);
+
+       /* set the field names */
+       QR_set_num_fields(stmt->result, result_cols);
+       QR_set_field_info(stmt->result, 0, "PROCEDURE_CAT", PG_TYPE_TEXT, MAX_INFO_STRING);
+       QR_set_field_info(stmt->result, 1, "PROCEDURE_SCHEM", PG_TYPE_TEXT, MAX_INFO_STRING);
+       QR_set_field_info(stmt->result, 2, "PROCEDURE_NAME", PG_TYPE_TEXT, MAX_INFO_STRING);
+       QR_set_field_info(stmt->result, 3, "NUM_INPUT_PARAMS", PG_TYPE_TEXT, MAX_INFO_STRING);
+       QR_set_field_info(stmt->result, 4, "NUM_OUTPUT_PARAMS", PG_TYPE_TEXT, MAX_INFO_STRING);
+       QR_set_field_info(stmt->result, 5, "NUM_RESULT_SET", PG_TYPE_TEXT, MAX_INFO_STRING);
+       QR_set_field_info(stmt->result, 6, "REMARKS", PG_TYPE_TEXT, MAX_INFO_STRING);
+       QR_set_field_info(stmt->result, 7, "PROCEDURE_TYPE", PG_TYPE_INT2, 2);
+                                                             
        SC_log_error(func, "Function not implemented", (StatementClass *) hstmt);
        return SQL_ERROR;
 }
index f2b185359010824b7bfc655404f42f4470316add..97a6ff8201618e67ccb19bb55079bb549d96157a 100644 (file)
@@ -698,7 +698,15 @@ pgtype_length(StatementClass *stmt, Int4 type, int col, int handle_unknown_size_
                        /* Character types (and NUMERIC) use the default precision */
                case PG_TYPE_VARCHAR:
                case PG_TYPE_BPCHAR:
+#ifdef MULTIBYTE
+                       /* after 7.2 */
+                       if (PG_VERSION_GE(SC_get_conn(stmt), 7.2)
+                               return 3 * pgtype_precision(stmt, type, col, handle_unknown_size_as);
+                       else
+#else
+                       /* CR -> CR/LF */
                        return 2 * pgtype_precision(stmt, type, col, handle_unknown_size_as);
+#endif /* MULTIBYTE */
                default:
                        return pgtype_precision(stmt, type, col, handle_unknown_size_as);
        }
index 25cd5547451ee6da7267ec802a0b3fcefd9fdb2b..23a5a82b39c86e2da0ae63ffcd5e882e30c4ed28 100644 (file)
@@ -53,28 +53,6 @@ SQLSetPos @68
 SQLSetScrollOptions @69
 SQLTablePrivileges @70
 SQLBindParameter @72
-
-SQLAllocHandle @80
-SQLBindParam @81
-SQLCloseCursor @82
-SQLColAttribute @83
-SQLCopyDesc @84
-SQLEndTran @85
-SQLFetchScroll @86
-SQLFreeHandle @87
-SQLGetDescField @88
-SQLGetDescRec @89
-SQLGetDiagField @90
-SQLGetDiagRec @91
-SQLGetEnvAttr @92
-SQLGetConnectAttr @93
-SQLGetStmtAttr @94
-SQLSetConnectAttr @95
-SQLSetDescField @96
-SQLSetDescRec @97
-SQLSetEnvAttr @98
-SQLSetStmtAttr @99
-
 SQLDummyOrdinal @199
 dconn_FDriverConnectProc @200
 DllMain @201