Revise the use of pgtype_xxxx() in catalog functions.
authorHiroshi Inoue <h-inoue@dream.email.ne.jp>
Sat, 18 Mar 2017 01:41:06 +0000 (10:41 +0900)
committerHiroshi Inoue <h-inoue@dream.email.ne.jp>
Sat, 18 Mar 2017 03:39:45 +0000 (12:39 +0900)
Replace pgtype_xxxx() whose 1st parameter is StatementClass with pgtype_attr_xxxx(). Also use macros for pgtype_xxxx() calls which have PG_ATP_UNSET, PG_ADT_UNSET or PG_UNKNOWNS_UNSET parameters.
Remove the use of PG_STATIC and UNKNOWNS_AS_DEFAULT.
Remove the test case in colattribute-test corresponding to UNKNOWNS_AS_DEFAULT. The test case was meaningless in the first place.

bind.c
dlg_specific.h
info.c
pgtypes.c
pgtypes.h
results.c
test/expected/colattribute.out
test/expected/colattribute_1.out
test/expected/colattribute_2.out
test/src/colattribute-test.c

diff --git a/bind.c b/bind.c
index 20edc22188d4b63d0197748a2362eafaa565f918..bd1a2ecac30a7efd835765c3e0abb492543cd63d 100644 (file)
--- a/bind.c
+++ b/bind.c
@@ -314,6 +314,7 @@ PGAPI_DescribeParam(HSTMT hstmt,
    RETCODE     ret = SQL_SUCCESS;
    int     num_params;
    OID     pgtype;
+   ConnectionClass *conn;
 
    mylog("%s: entering...%d\n", func, ipar);
 
@@ -322,6 +323,7 @@ PGAPI_DescribeParam(HSTMT hstmt,
        SC_log_error(func, "", NULL);
        return SQL_INVALID_HANDLE;
    }
+   conn = SC_get_conn(stmt);
    SC_clear_error(stmt);
 
    ipdopts = SC_get_IPDF(stmt);
@@ -371,7 +373,7 @@ inolog("[%d].SQLType=%d .PGType=%d\n", ipar, ipdopts->parameters[ipar].SQLType,
        if (ipdopts->parameters[ipar].SQLType)
            *pfSqlType = ipdopts->parameters[ipar].SQLType;
        else if (pgtype)
-           *pfSqlType = pgtype_to_concise_type(stmt, pgtype, PG_STATIC, PG_UNKNOWNS_UNSET);
+           *pfSqlType = pgtype_attr_to_concise_type(conn, pgtype, PG_ATP_UNSET, PG_ADT_UNSET, PG_UNKNOWNS_UNSET);
        else
        {
            ret = SQL_ERROR;
@@ -386,7 +388,7 @@ inolog("[%d].SQLType=%d .PGType=%d\n", ipar, ipdopts->parameters[ipar].SQLType,
        if (ipdopts->parameters[ipar].SQLType)
            *pcbParamDef = ipdopts->parameters[ipar].column_size;
        if (0 == *pcbParamDef && pgtype)
-           *pcbParamDef = pgtype_column_size(stmt, pgtype, PG_STATIC, PG_STATIC);
+           *pcbParamDef = pgtype_attr_column_size(conn, pgtype, PG_ATP_UNSET, PG_ADT_UNSET, PG_UNKNOWNS_UNSET);
    }
 
    if (pibScale)
index 67e333e88eefee3e5c661afecb384c089920819f..45c90c642a7a713d1630c47e6dd294dd8f33529e 100644 (file)
@@ -20,7 +20,6 @@
 extern "C" {
 #endif /* __cplusplus */
 /* Unknown data type sizes */
-#define UNKNOWNS_AS_DEFAULT            -1
 #define UNKNOWNS_AS_MAX                0
 #define UNKNOWNS_AS_DONTKNOW           1
 #define UNKNOWNS_AS_LONGEST            2
diff --git a/info.c b/info.c
index 9dd4de281ed9e35cb5d4619868ea9d346699061b..d7894824839a10a8fd3ff756723318122a2848e0 100644 (file)
--- a/info.c
+++ b/info.c
@@ -1082,6 +1082,18 @@ cleanup:
    return result;
 }
 
+/*
+ * macros for pgtype_xxxx() calls which have PG_ATP_UNSET parameters
+ */
+#define PGTYPE_COLUMN_SIZE(conn, pgType) pgtype_attr_column_size(conn, pgType, PG_ATP_UNSET, PG_ADT_UNSET, PG_UNKNOWNS_UNSET)
+#define PGTYPE_TO_CONCISE_TYPE(conn, pgType) pgtype_attr_to_concise_type(conn, pgType, PG_ATP_UNSET, PG_ADT_UNSET, PG_UNKNOWNS_UNSET)
+#define PGTYPE_TO_SQLDESCTYPE(conn, pgType) pgtype_attr_to_sqldesctype(conn, pgType, PG_ATP_UNSET, PG_ADT_UNSET, PG_UNKNOWNS_UNSET)
+#define PGTYPE_BUFFER_LENGTH(conn, pgType) pgtype_attr_buffer_length(conn, pgType, PG_ATP_UNSET, PG_ADT_UNSET, PG_UNKNOWNS_UNSET)
+#define PGTYPE_DECIMAL_DIGITS(conn, pgType) pgtype_attr_decimal_digits(conn, pgType, PG_ATP_UNSET, PG_ADT_UNSET, PG_UNKNOWNS_UNSET)
+#define PGTYPE_TRANSFER_OCTET_LENGTH(conn, pgType) pgtype_attr_transfer_octet_length(conn, pgType, PG_ATP_UNSET, PG_UNKNOWNS_UNSET)
+#define PGTYPE_TO_NAME(conn, pgType, auto_increment) pgtype_attr_to_name(conn, pgType, PG_ATP_UNSET, auto_increment)
+#define PGTYPE_TO_DATETIME_SUB(conn, pgtype) pgtype_attr_to_datetime_sub(conn, pgtype, PG_ATP_UNSET)
+
 
 RETCODE        SQL_API
 PGAPI_GetTypeInfo(HSTMT hstmt,
@@ -1175,13 +1187,13 @@ mylog("aunq_match=%d pgtcount=%d\n", aunq_match, pgtcount);
                /* These values can't be NULL */
                if (aunq_match == cnt)
                {
-                   set_tuplefield_string(&tuple[0], pgtype_to_name(stmt, pgType, PG_ADT_UNSET, TRUE));
+                   set_tuplefield_string(&tuple[0], PGTYPE_TO_NAME(conn, pgType, TRUE));
                    set_tuplefield_int2(&tuple[6], SQL_NO_NULLS);
 inolog("serial in\n");
                }
                else
                {
-                   set_tuplefield_string(&tuple[0], pgtype_to_name(stmt, pgType, PG_ADT_UNSET, FALSE));
+                   set_tuplefield_string(&tuple[0], PGTYPE_TO_NAME(conn, pgType, FALSE));
                    set_tuplefield_int2(&tuple[6], pgtype_nullable(conn, pgType));
                }
                set_tuplefield_int2(&tuple[1], (Int2) sqlType);
@@ -1196,7 +1208,7 @@ inolog("serial in\n");
                set_tuplefield_null(&tuple[12]);
 
                /* These values can be NULL */
-               set_nullfield_int4(&tuple[2], pgtype_column_size(stmt, pgType, PG_STATIC, PG_UNKNOWNS_UNSET));
+               set_nullfield_int4(&tuple[2], PGTYPE_COLUMN_SIZE(conn, pgType));
                set_nullfield_string(&tuple[3], pgtype_literal_prefix(conn, pgType));
                set_nullfield_string(&tuple[4], pgtype_literal_suffix(conn, pgType));
                set_nullfield_string(&tuple[5], pgtype_create_params(conn, pgType));
@@ -1210,8 +1222,8 @@ inolog("serial in\n");
                    set_nullfield_int2(&tuple[11], pgtype_auto_increment(conn, pgType));
                set_nullfield_int2(&tuple[13], pgtype_min_decimal_digits(conn, pgType));
                set_nullfield_int2(&tuple[14], pgtype_max_decimal_digits(conn, pgType));
-               set_nullfield_int2(&tuple[15], pgtype_to_sqldesctype(stmt, pgType, PG_STATIC, PG_UNKNOWNS_UNSET));
-               set_nullfield_int2(&tuple[16], pgtype_to_datetime_sub(stmt, pgType, PG_ADT_UNSET));
+               set_nullfield_int2(&tuple[15], PGTYPE_TO_SQLDESCTYPE(conn, pgType));
+               set_nullfield_int2(&tuple[16], PGTYPE_TO_DATETIME_SUB(conn, pgType));
                set_nullfield_int4(&tuple[17], pgtype_radix(conn, pgType));
                set_nullfield_int4(&tuple[18], 0);
            }
@@ -2084,6 +2096,18 @@ cleanup:
    return ret;
 }
 
+/*
+ * macros for pgtype_attr_xxxx() calls which have
+ *     PG_ADT_UNSET or PG_UNKNOWNS_UNSET parameters
+ */
+#define PGTYPE_ATTR_COLUMN_SIZE(conn, pgType, atttypmod) pgtype_attr_column_size(conn, pgType, atttypmod, PG_ADT_UNSET, PG_UNKNOWNS_UNSET)
+#define PGTYPE_ATTR_TO_CONCISE_TYPE(conn, pgType, atttypmod) pgtype_attr_to_concise_type(conn, pgType, atttypmod, PG_ADT_UNSET, PG_UNKNOWNS_UNSET)
+#define PGTYPE_ATTR_TO_SQLDESCTYPE(conn, pgType, atttypmod) pgtype_attr_to_sqldesctype(conn, pgType, atttypmod, PG_ADT_UNSET, PG_UNKNOWNS_UNSET)
+#define PGTYPE_ATTR_DISPLAY_SIZE(conn, pgType, atttypmod) pgtype_attr_display_size(conn, pgType, atttypmod, PG_ADT_UNSET, PG_UNKNOWNS_UNSET)
+#define PGTYPE_ATTR_BUFFER_LENGTH(conn, pgType, atttypmod) pgtype_attr_buffer_length(conn, pgType, atttypmod, PG_ADT_UNSET, PG_UNKNOWNS_UNSET)
+#define PGTYPE_ATTR_DECIMAL_DIGITS(conn, pgType, atttypmod) pgtype_attr_decimal_digits(conn, pgType, atttypmod, PG_ADT_UNSET, PG_UNKNOWNS_UNSET)
+#define PGTYPE_ATTR_TRANSFER_OCTET_LENGTH(conn, pgType, atttypmod) pgtype_attr_transfer_octet_length(conn, pgType, atttypmod, PG_UNKNOWNS_UNSET)
+
 /*
  * for oid or xmin
  */
@@ -2098,13 +2122,13 @@ add_tuple_for_oid_or_xmin(TupleField *tuple, int ordinal, const char *colname, O
    set_tuplefield_string(&tuple[COLUMNS_SCHEMA_NAME], GET_SCHEMA_NAME(table_owner));
    set_tuplefield_string(&tuple[COLUMNS_TABLE_NAME], table_name);
    set_tuplefield_string(&tuple[COLUMNS_COLUMN_NAME], colname);
-   sqltype = pgtype_attr_to_concise_type(conn, the_type, atttypmod, PG_ADT_UNSET, PG_UNKNOWNS_UNSET);
+   sqltype = PGTYPE_ATTR_TO_CONCISE_TYPE(conn, the_type, atttypmod);
    set_tuplefield_int2(&tuple[COLUMNS_DATA_TYPE], sqltype);
    set_tuplefield_string(&tuple[COLUMNS_TYPE_NAME], typname);
 
-   set_tuplefield_int4(&tuple[COLUMNS_PRECISION], pgtype_attr_column_size(conn, the_type, atttypmod, PG_ADT_UNSET, PG_UNKNOWNS_UNSET));
-   set_tuplefield_int4(&tuple[COLUMNS_LENGTH], pgtype_attr_buffer_length(conn, the_type, atttypmod, PG_ADT_UNSET, PG_UNKNOWNS_UNSET));
-   set_nullfield_int2(&tuple[COLUMNS_SCALE], pgtype_attr_decimal_digits(conn, the_type, atttypmod, PG_ADT_UNSET, PG_UNKNOWNS_UNSET));
+   set_tuplefield_int4(&tuple[COLUMNS_PRECISION], PGTYPE_ATTR_COLUMN_SIZE(conn, the_type, atttypmod));
+   set_tuplefield_int4(&tuple[COLUMNS_LENGTH], PGTYPE_ATTR_BUFFER_LENGTH(conn, the_type, atttypmod));
+   set_nullfield_int2(&tuple[COLUMNS_SCALE], PGTYPE_ATTR_DECIMAL_DIGITS(conn, the_type, atttypmod));
    set_nullfield_int2(&tuple[COLUMNS_RADIX], pgtype_radix(conn, the_type));
    set_tuplefield_int2(&tuple[COLUMNS_NULLABLE], SQL_NO_NULLS);
    set_tuplefield_string(&tuple[COLUMNS_REMARKS], NULL_STRING);
@@ -2114,7 +2138,7 @@ add_tuple_for_oid_or_xmin(TupleField *tuple, int ordinal, const char *colname, O
    set_tuplefield_null(&tuple[COLUMNS_CHAR_OCTET_LENGTH]);
    set_tuplefield_int4(&tuple[COLUMNS_ORDINAL_POSITION], ordinal);
    set_tuplefield_string(&tuple[COLUMNS_IS_NULLABLE], "No");
-   set_tuplefield_int4(&tuple[COLUMNS_DISPLAY_SIZE], pgtype_attr_display_size(conn, the_type, atttypmod, PG_ADT_UNSET, PG_UNKNOWNS_UNSET));
+   set_tuplefield_int4(&tuple[COLUMNS_DISPLAY_SIZE], PGTYPE_ATTR_DISPLAY_SIZE(conn, the_type, atttypmod));
    set_tuplefield_int4(&tuple[COLUMNS_FIELD_TYPE], the_type);
    set_tuplefield_int4(&tuple[COLUMNS_AUTO_INCREMENT], auto_increment);
    set_tuplefield_int2(&tuple[COLUMNS_PHYSICAL_NUMBER], attnum);
@@ -2594,13 +2618,13 @@ mylog(" and the data=%s\n", attdef);
                if (mod_length >= 4)
                    mod_length -= 4;
        }
-       set_tuplefield_int4(&tuple[COLUMNS_PRECISION], pgtype_attr_column_size(conn, field_type, mod_length, PG_ADT_UNSET, PG_UNKNOWNS_UNSET));
-       set_tuplefield_int4(&tuple[COLUMNS_LENGTH], pgtype_attr_buffer_length(conn, field_type, mod_length, PG_ADT_UNSET, PG_UNKNOWNS_UNSET));
-       set_tuplefield_int4(&tuple[COLUMNS_DISPLAY_SIZE], pgtype_attr_display_size(conn, field_type, mod_length, PG_ADT_UNSET, PG_UNKNOWNS_UNSET));
-       set_nullfield_int2(&tuple[COLUMNS_SCALE], pgtype_attr_decimal_digits(conn, field_type, mod_length, PG_ADT_UNSET, PG_UNKNOWNS_UNSET));
+       set_tuplefield_int4(&tuple[COLUMNS_PRECISION], PGTYPE_ATTR_COLUMN_SIZE(conn, field_type, mod_length));
+       set_tuplefield_int4(&tuple[COLUMNS_LENGTH], PGTYPE_ATTR_BUFFER_LENGTH(conn, field_type, mod_length));
+       set_tuplefield_int4(&tuple[COLUMNS_DISPLAY_SIZE], PGTYPE_ATTR_DISPLAY_SIZE(conn, field_type, mod_length));
+       set_nullfield_int2(&tuple[COLUMNS_SCALE], PGTYPE_ATTR_DECIMAL_DIGITS(conn, field_type, mod_length));
 
-       sqltype = pgtype_attr_to_concise_type(conn, field_type, mod_length, PG_ADT_UNSET, PG_UNKNOWNS_UNSET);
-       concise_type = pgtype_attr_to_sqldesctype(conn, field_type, mod_length, PG_ADT_UNSET, PG_UNKNOWNS_UNSET);
+       sqltype = PGTYPE_ATTR_TO_CONCISE_TYPE(conn, field_type, mod_length);
+       concise_type = PGTYPE_ATTR_TO_SQLDESCTYPE(conn, field_type, mod_length);
 
        set_tuplefield_int2(&tuple[COLUMNS_DATA_TYPE], sqltype);
 
@@ -2613,7 +2637,7 @@ mylog(" and the data=%s\n", attdef);
            set_tuplefield_string(&tuple[COLUMNS_COLUMN_DEF], attdef);
        set_tuplefield_int2(&tuple[COLUMNS_SQL_DATA_TYPE], concise_type);
        set_nullfield_int2(&tuple[COLUMNS_SQL_DATETIME_SUB], pgtype_attr_to_datetime_sub(conn, field_type, mod_length));
-       set_tuplefield_int4(&tuple[COLUMNS_CHAR_OCTET_LENGTH], pgtype_attr_transfer_octet_length(conn, field_type, mod_length, PG_UNKNOWNS_UNSET));
+       set_tuplefield_int4(&tuple[COLUMNS_CHAR_OCTET_LENGTH], PGTYPE_ATTR_TRANSFER_OCTET_LENGTH(conn, field_type, mod_length));
        set_tuplefield_int4(&tuple[COLUMNS_ORDINAL_POSITION], ordinal);
        set_tuplefield_null(&tuple[COLUMNS_IS_NULLABLE]);
        set_tuplefield_int4(&tuple[COLUMNS_FIELD_TYPE], field_type);
@@ -2844,16 +2868,17 @@ retry_public_schema:
        else if (fColType == SQL_ROWVER)
        {
            Int2        the_type = PG_TYPE_TID;
+           int atttypmod = -1;
 
            tuple = QR_AddNew(res);
 
            set_tuplefield_null(&tuple[0]);
            set_tuplefield_string(&tuple[1], "ctid");
-           set_tuplefield_int2(&tuple[2], pgtype_to_concise_type(stmt, the_type, PG_STATIC, PG_UNKNOWNS_UNSET));
-           set_tuplefield_string(&tuple[3], pgtype_to_name(stmt, the_type, PG_ADT_UNSET, FALSE));
-           set_tuplefield_int4(&tuple[4], pgtype_column_size(stmt, the_type, PG_STATIC, PG_UNKNOWNS_UNSET));
-           set_tuplefield_int4(&tuple[5], pgtype_buffer_length(stmt, the_type, PG_STATIC, PG_UNKNOWNS_UNSET));
-           set_tuplefield_int2(&tuple[6], pgtype_decimal_digits(stmt, the_type, PG_STATIC));
+           set_tuplefield_int2(&tuple[2], PGTYPE_ATTR_TO_CONCISE_TYPE(conn, the_type, atttypmod));
+           set_tuplefield_string(&tuple[3], pgtype_attr_to_name(conn, the_type, atttypmod, FALSE));
+           set_tuplefield_int4(&tuple[4], PGTYPE_ATTR_COLUMN_SIZE(conn, the_type, atttypmod));
+           set_tuplefield_int4(&tuple[5], PGTYPE_ATTR_BUFFER_LENGTH(conn, the_type, atttypmod));
+           set_tuplefield_int2(&tuple[6], PGTYPE_ATTR_DECIMAL_DIGITS(conn, the_type, atttypmod));
            set_tuplefield_int2(&tuple[7], SQL_PC_NOT_PSEUDO);
 inolog("Add ctid\n");
        }
@@ -2864,6 +2889,7 @@ inolog("Add ctid\n");
        if (fColType == SQL_BEST_ROWID)
        {
            Int2    the_type = PG_TYPE_OID;
+           int atttypmod = -1;
 
            if (relhasoids[0] != '1')
            {
@@ -2873,26 +2899,27 @@ inolog("Add ctid\n");
 
            set_tuplefield_int2(&tuple[0], SQL_SCOPE_SESSION);
            set_tuplefield_string(&tuple[1], OID_NAME);
-           set_tuplefield_int2(&tuple[2], pgtype_to_concise_type(stmt, the_type, PG_STATIC, PG_UNKNOWNS_UNSET));
-           set_tuplefield_string(&tuple[3], pgtype_to_name(stmt, the_type, PG_ADT_UNSET, TRUE));
-           set_tuplefield_int4(&tuple[4], pgtype_column_size(stmt, the_type, PG_STATIC, PG_UNKNOWNS_UNSET));
-           set_tuplefield_int4(&tuple[5], pgtype_buffer_length(stmt, the_type, PG_STATIC, PG_UNKNOWNS_UNSET));
-           set_tuplefield_int2(&tuple[6], pgtype_decimal_digits(stmt, the_type, PG_STATIC));
+           set_tuplefield_int2(&tuple[2], PGTYPE_ATTR_TO_CONCISE_TYPE(conn, the_type, atttypmod));
+           set_tuplefield_string(&tuple[3], pgtype_attr_to_name(conn, the_type, atttypmod, TRUE));
+           set_tuplefield_int4(&tuple[4], PGTYPE_ATTR_COLUMN_SIZE(conn, the_type, atttypmod));
+           set_tuplefield_int4(&tuple[5], PGTYPE_ATTR_BUFFER_LENGTH(conn, the_type, atttypmod));
+           set_tuplefield_int2(&tuple[6], PGTYPE_ATTR_DECIMAL_DIGITS(conn, the_type, atttypmod));
            set_tuplefield_int2(&tuple[7], SQL_PC_PSEUDO);
        }
        else if (fColType == SQL_ROWVER)
        {
            Int2        the_type = PG_TYPE_XID;
+           int atttypmod = -1;
 
            tuple = QR_AddNew(res);
 
            set_tuplefield_null(&tuple[0]);
            set_tuplefield_string(&tuple[1], XMIN_NAME);
-           set_tuplefield_int2(&tuple[2], pgtype_to_concise_type(stmt, the_type, PG_STATIC, PG_UNKNOWNS_UNSET));
-           set_tuplefield_string(&tuple[3], pgtype_to_name(stmt, the_type, PG_ADT_UNSET, FALSE));
-           set_tuplefield_int4(&tuple[4], pgtype_column_size(stmt, the_type, PG_STATIC, PG_UNKNOWNS_UNSET));
-           set_tuplefield_int4(&tuple[5], pgtype_buffer_length(stmt, the_type, PG_STATIC, PG_UNKNOWNS_UNSET));
-           set_tuplefield_int2(&tuple[6], pgtype_decimal_digits(stmt, the_type, PG_STATIC));
+           set_tuplefield_int2(&tuple[2], PGTYPE_ATTR_TO_CONCISE_TYPE(conn, the_type, atttypmod));
+           set_tuplefield_string(&tuple[3], pgtype_attr_to_name(conn, the_type, atttypmod, FALSE));
+           set_tuplefield_int4(&tuple[4], PGTYPE_ATTR_COLUMN_SIZE(conn, the_type, atttypmod));
+           set_tuplefield_int4(&tuple[5], PGTYPE_ATTR_BUFFER_LENGTH(conn, the_type, atttypmod));
+           set_tuplefield_int2(&tuple[6], PGTYPE_ATTR_DECIMAL_DIGITS(conn, the_type, atttypmod));
            set_tuplefield_int2(&tuple[7], SQL_PC_PSEUDO);
        }
    }
@@ -4967,19 +4994,19 @@ mylog("atttypid=%s\n", atttypid ? atttypid : "(null)");
                set_tuplefield_string(&tuple[PROCOLS_PROCEDURE_NAME], procname);
                set_tuplefield_string(&tuple[PROCOLS_COLUMN_NAME], NULL_STRING);
                set_tuplefield_int2(&tuple[PROCOLS_COLUMN_TYPE], SQL_RETURN_VALUE);
-               set_tuplefield_int2(&tuple[PROCOLS_DATA_TYPE], pgtype_to_concise_type(stmt, pgtype, PG_STATIC, PG_UNKNOWNS_UNSET));
-               set_tuplefield_string(&tuple[PROCOLS_TYPE_NAME], pgtype_to_name(stmt, pgtype, PG_ADT_UNSET, FALSE));
-               column_size = pgtype_column_size(stmt, pgtype, PG_STATIC, PG_UNKNOWNS_UNSET);
+               set_tuplefield_int2(&tuple[PROCOLS_DATA_TYPE], PGTYPE_TO_CONCISE_TYPE(conn, pgtype));
+               set_tuplefield_string(&tuple[PROCOLS_TYPE_NAME], PGTYPE_TO_NAME(conn, pgtype, FALSE));
+               column_size = PGTYPE_COLUMN_SIZE(conn, pgtype);
                set_nullfield_int4(&tuple[PROCOLS_COLUMN_SIZE], column_size);
-               set_tuplefield_int4(&tuple[PROCOLS_BUFFER_LENGTH], pgtype_buffer_length(stmt, pgtype, PG_STATIC, PG_UNKNOWNS_UNSET));
-               set_nullfield_int2(&tuple[PROCOLS_DECIMAL_DIGITS], pgtype_decimal_digits(stmt, pgtype, PG_STATIC));
+               set_tuplefield_int4(&tuple[PROCOLS_BUFFER_LENGTH], PGTYPE_BUFFER_LENGTH(conn, pgtype));
+               set_nullfield_int2(&tuple[PROCOLS_DECIMAL_DIGITS], PGTYPE_DECIMAL_DIGITS(conn, pgtype));
                set_nullfield_int2(&tuple[PROCOLS_NUM_PREC_RADIX], pgtype_radix(conn, pgtype));
                set_tuplefield_int2(&tuple[PROCOLS_NULLABLE], SQL_NULLABLE_UNKNOWN);
                set_tuplefield_null(&tuple[PROCOLS_REMARKS]);
                set_tuplefield_null(&tuple[PROCOLS_COLUMN_DEF]);
-               set_nullfield_int2(&tuple[PROCOLS_SQL_DATA_TYPE], pgtype_to_sqldesctype(stmt, pgtype, PG_STATIC, PG_UNKNOWNS_UNSET));
-               set_nullfield_int2(&tuple[PROCOLS_SQL_DATETIME_SUB], pgtype_to_datetime_sub(stmt, pgtype, PG_ADT_UNSET));
-               set_nullfield_int4(&tuple[PROCOLS_CHAR_OCTET_LENGTH], pgtype_attr_transfer_octet_length(conn, pgtype, PG_ADT_UNSET, PG_UNKNOWNS_UNSET));
+               set_nullfield_int2(&tuple[PROCOLS_SQL_DATA_TYPE], PGTYPE_TO_SQLDESCTYPE(conn, pgtype));
+               set_nullfield_int2(&tuple[PROCOLS_SQL_DATETIME_SUB], PGTYPE_TO_DATETIME_SUB(conn, pgtype));
+               set_nullfield_int4(&tuple[PROCOLS_CHAR_OCTET_LENGTH], PGTYPE_TRANSFER_OCTET_LENGTH(conn, pgtype));
                set_tuplefield_int4(&tuple[PROCOLS_ORDINAL_POSITION], 0);
                set_tuplefield_string(&tuple[PROCOLS_IS_NULLABLE], NULL_STRING);
            }
@@ -5091,19 +5118,19 @@ mylog("atttypid=%s\n", atttypid ? atttypid : "(null)");
                }
                else
                    set_tuplefield_int2(&tuple[PROCOLS_COLUMN_TYPE], SQL_PARAM_INPUT);
-               set_tuplefield_int2(&tuple[PROCOLS_DATA_TYPE], pgtype_to_concise_type(stmt, pgtype, PG_STATIC, PG_UNKNOWNS_UNSET));
-               set_tuplefield_string(&tuple[PROCOLS_TYPE_NAME], pgtype_to_name(stmt, pgtype, PG_ADT_UNSET, FALSE));
-               column_size = pgtype_column_size(stmt, pgtype, PG_STATIC, PG_UNKNOWNS_UNSET);
+               set_tuplefield_int2(&tuple[PROCOLS_DATA_TYPE], PGTYPE_TO_CONCISE_TYPE(conn, pgtype));
+               set_tuplefield_string(&tuple[PROCOLS_TYPE_NAME], PGTYPE_TO_NAME(conn, pgtype, FALSE));
+               column_size = PGTYPE_COLUMN_SIZE(conn, pgtype);
                set_nullfield_int4(&tuple[PROCOLS_COLUMN_SIZE], column_size);
-               set_tuplefield_int4(&tuple[PROCOLS_BUFFER_LENGTH], pgtype_buffer_length(stmt, pgtype, PG_STATIC, PG_UNKNOWNS_UNSET));
-               set_nullfield_int2(&tuple[PROCOLS_DECIMAL_DIGITS], pgtype_decimal_digits(stmt, pgtype, PG_STATIC));
+               set_tuplefield_int4(&tuple[PROCOLS_BUFFER_LENGTH], PGTYPE_BUFFER_LENGTH(conn, pgtype));
+               set_nullfield_int2(&tuple[PROCOLS_DECIMAL_DIGITS], PGTYPE_DECIMAL_DIGITS(conn, pgtype));
                set_nullfield_int2(&tuple[PROCOLS_NUM_PREC_RADIX], pgtype_radix(conn, pgtype));
                set_tuplefield_int2(&tuple[PROCOLS_NULLABLE], SQL_NULLABLE_UNKNOWN);
                set_tuplefield_null(&tuple[PROCOLS_REMARKS]);
                set_tuplefield_null(&tuple[PROCOLS_COLUMN_DEF]);
-               set_nullfield_int2(&tuple[PROCOLS_SQL_DATA_TYPE], pgtype_to_sqldesctype(stmt, pgtype, PG_STATIC, PG_UNKNOWNS_UNSET));
-               set_nullfield_int2(&tuple[PROCOLS_SQL_DATETIME_SUB], pgtype_to_datetime_sub(stmt, pgtype, PG_ADT_UNSET));
-               set_nullfield_int4(&tuple[PROCOLS_CHAR_OCTET_LENGTH], pgtype_attr_transfer_octet_length(conn, pgtype, PG_ADT_UNSET, PG_UNKNOWNS_UNSET));
+               set_nullfield_int2(&tuple[PROCOLS_SQL_DATA_TYPE], PGTYPE_TO_SQLDESCTYPE(conn, pgtype));
+               set_nullfield_int2(&tuple[PROCOLS_SQL_DATETIME_SUB], PGTYPE_TO_DATETIME_SUB(conn, pgtype));
+               set_nullfield_int4(&tuple[PROCOLS_CHAR_OCTET_LENGTH], PGTYPE_TRANSFER_OCTET_LENGTH(conn, pgtype));
                set_tuplefield_int4(&tuple[PROCOLS_ORDINAL_POSITION], j + 1);
                set_tuplefield_string(&tuple[PROCOLS_IS_NULLABLE], NULL_STRING);
            }
@@ -5129,19 +5156,19 @@ mylog("atttypid=%s\n", atttypid ? atttypid : "(null)");
            set_tuplefield_string(&tuple[PROCOLS_PROCEDURE_NAME], procname);
            set_tuplefield_string(&tuple[PROCOLS_COLUMN_NAME], attname);
            set_tuplefield_int2(&tuple[PROCOLS_COLUMN_TYPE], SQL_RESULT_COL);
-           set_tuplefield_int2(&tuple[PROCOLS_DATA_TYPE], pgtype_to_concise_type(stmt, typid, PG_STATIC, PG_UNKNOWNS_UNSET));
-           set_tuplefield_string(&tuple[PROCOLS_TYPE_NAME], pgtype_to_name(stmt, typid, PG_ADT_UNSET, FALSE));
-           column_size = pgtype_column_size(stmt, typid, PG_STATIC, PG_UNKNOWNS_UNSET);
+           set_tuplefield_int2(&tuple[PROCOLS_DATA_TYPE], PGTYPE_TO_CONCISE_TYPE(conn, typid));
+           set_tuplefield_string(&tuple[PROCOLS_TYPE_NAME], PGTYPE_TO_NAME(conn, typid, FALSE));
+           column_size = PGTYPE_COLUMN_SIZE(conn, typid);
            set_nullfield_int4(&tuple[PROCOLS_COLUMN_SIZE], column_size);
-           set_tuplefield_int4(&tuple[PROCOLS_BUFFER_LENGTH], pgtype_buffer_length(stmt, typid, PG_STATIC, PG_UNKNOWNS_UNSET));
-           set_nullfield_int2(&tuple[PROCOLS_DECIMAL_DIGITS], pgtype_decimal_digits(stmt, typid, PG_STATIC));
+           set_tuplefield_int4(&tuple[PROCOLS_BUFFER_LENGTH], PGTYPE_BUFFER_LENGTH(conn, typid));
+           set_nullfield_int2(&tuple[PROCOLS_DECIMAL_DIGITS], PGTYPE_DECIMAL_DIGITS(conn, typid));
            set_nullfield_int2(&tuple[PROCOLS_NUM_PREC_RADIX], pgtype_radix(conn, typid));
            set_tuplefield_int2(&tuple[PROCOLS_NULLABLE], SQL_NULLABLE_UNKNOWN);
            set_tuplefield_null(&tuple[PROCOLS_REMARKS]);
            set_tuplefield_null(&tuple[PROCOLS_COLUMN_DEF]);
-           set_nullfield_int2(&tuple[PROCOLS_SQL_DATA_TYPE], pgtype_to_sqldesctype(stmt, typid, PG_STATIC, PG_UNKNOWNS_UNSET));
-           set_nullfield_int2(&tuple[PROCOLS_SQL_DATETIME_SUB], pgtype_to_datetime_sub(stmt, typid, PG_ADT_UNSET));
-           set_nullfield_int4(&tuple[PROCOLS_CHAR_OCTET_LENGTH], pgtype_attr_transfer_octet_length(conn, typid, PG_ADT_UNSET, PG_UNKNOWNS_UNSET));
+           set_nullfield_int2(&tuple[PROCOLS_SQL_DATA_TYPE], PGTYPE_TO_SQLDESCTYPE(conn, typid));
+           set_nullfield_int2(&tuple[PROCOLS_SQL_DATETIME_SUB], PGTYPE_TO_DATETIME_SUB(conn, typid));
+           set_nullfield_int4(&tuple[PROCOLS_CHAR_OCTET_LENGTH], PGTYPE_TRANSFER_OCTET_LENGTH(conn, typid));
            set_tuplefield_int4(&tuple[PROCOLS_ORDINAL_POSITION], 0);
            set_tuplefield_string(&tuple[PROCOLS_IS_NULLABLE], NULL_STRING);
        }
index 7cfd3489e2c2ebb0c7042673b061912eca6e5c75..044ad53b0f456f4ff8ddacb19b5e966b01154770 100644 (file)
--- a/pgtypes.c
+++ b/pgtypes.c
@@ -247,8 +247,6 @@ getCharColumnSizeX(const ConnectionClass *conn, OID type, int atttypmod, int adt
 
    mylog("%s: type=%d, atttypmod=%d, adtsize_or=%d, unknown = %d\n", __FUNCTION__, type, atttypmod, adtsize_or_longestlen, handle_unknown_size_as);
 
-   if (handle_unknown_size_as == UNKNOWNS_AS_DEFAULT)
-       handle_unknown_size_as = ci->drivers.unknown_sizes;
    /* Assign Maximum size based on parameters */
    switch (type)
    {
@@ -377,8 +375,6 @@ getNumericColumnSizeX(const ConnectionClass *conn, OID type, int atttypmod, int
 
    mylog("%s: type=%d, typmod=%d\n", __FUNCTION__, type, atttypmod);
 
-   if (handle_unknown_size_as == UNKNOWNS_AS_DEFAULT)
-       handle_unknown_size_as = conn->connInfo.drivers.unknown_sizes;
    if (atttypmod > -1)
        return (atttypmod >> 16) & 0xffff;
    switch (handle_unknown_size_as)
@@ -653,7 +649,7 @@ pgtype_attr_to_datetime_sub(const ConnectionClass *conn, OID type, int atttypmod
 {
    SQLSMALLINT rettype;
 
-   switch (rettype = pgtype_attr_to_concise_type(conn, type, atttypmod, PG_ADT_UNSET, UNKNOWNS_AS_DEFAULT))
+   switch (rettype = pgtype_attr_to_concise_type(conn, type, atttypmod, PG_ADT_UNSET, PG_UNKNOWNS_UNSET))
    {
        case SQL_TYPE_DATE:
            return SQL_CODE_DATE;
@@ -852,8 +848,6 @@ pgtype_attr_column_size(const ConnectionClass *conn, OID type, int atttypmod, in
 {
    const ConnInfo  *ci = &(conn->connInfo);
 
-   if (handle_unknown_size_as == UNKNOWNS_AS_DEFAULT)
-       handle_unknown_size_as = ci->drivers.unknown_sizes;
    switch (type)
    {
        case PG_TYPE_CHAR:
index 5e60273427d9630c847c2a2b4e17db5d004d3be7..d2da668fbd3b030978b59830c8c889d7d3917145 100644 (file)
--- a/pgtypes.h
+++ b/pgtypes.h
@@ -70,8 +70,8 @@
 extern SQLSMALLINT sqlTypes[];
 
 /* Defines for pgtype_precision */
-#define PG_STATIC              (-1)
-#define PG_ADT_UNSET               (-3)
+#define PG_ATP_UNSET               (-3)    /* atttypmod */
+#define PG_ADT_UNSET               (-3)    /* adtsize_or_longestlen */
 #define PG_UNKNOWNS_UNSET          0 /* UNKNOWNS_AS_MAX */
 #define PG_WIDTH_OF_BOOLS_AS_CHAR      5
 
index ef8a79ba8c2f0815c69f134800303ec718d0de6e..fc9f3328a1d81339a088d8e9f47591b328409773 100644 (file)
--- a/results.c
+++ b/results.c
@@ -4027,6 +4027,7 @@ SC_pos_update(StatementClass *stmt,
        OID     fieldtype = 0;
        const char *bestitem = GET_NAME(ti->bestitem);
        const char *bestqual = GET_NAME(ti->bestqual);
+       int unknown_sizes = ci->drivers.unknown_sizes;
 
        snprintf_add(updstr, sizeof(updstr),
                     " where ctid = '(%u, %u)'",
@@ -4077,8 +4078,8 @@ SC_pos_update(StatementClass *stmt,
                        (SQLUSMALLINT) ++j,
                        SQL_PARAM_INPUT,
                        bindings[i].returntype,
-                       pgtype_to_concise_type(s.stmt, fieldtype, i, UNKNOWNS_AS_DEFAULT),
-                                                               fi[i]->column_size > 0 ? fi[i]->column_size : pgtype_column_size(s.stmt, fieldtype, i, ci->drivers.unknown_sizes),
+                       pgtype_to_concise_type(s.stmt, fieldtype, i, unknown_sizes),
+                                                               fi[i]->column_size > 0 ? fi[i]->column_size : pgtype_column_size(s.stmt, fieldtype, i, unknown_sizes),
                        (SQLSMALLINT) fi[i]->decimal_digits,
                        bindings[i].buffer,
                        bindings[i].buflen,
@@ -4419,6 +4420,7 @@ SC_pos_add(StatementClass *stmt,
    SQLLEN      *used;
    Int4        bind_size = opts->bind_size;
    OID     fieldtype;
+   int     unknown_sizes;
    int     func_cs_count = 0;
 
    mylog("POS ADD fi=%p ti=%p\n", fi, stmt->ti);
@@ -4460,6 +4462,7 @@ SC_pos_add(StatementClass *stmt,
    ipdopts = SC_get_IPDF(s.qstmt);
    SC_set_delegate(s.stmt, s.qstmt);
    ci = &(conn->connInfo);
+   unknown_sizes = ci->drivers.unknown_sizes;
    extend_iparameter_bindings(ipdopts, num_cols);
    for (i = add_cols = 0; i < num_cols; i++)
    {
@@ -4486,8 +4489,8 @@ SC_pos_add(StatementClass *stmt,
                    (SQLUSMALLINT) ++add_cols,
                    SQL_PARAM_INPUT,
                    bindings[i].returntype,
-                   pgtype_to_concise_type(s.stmt, fieldtype, i, UNKNOWNS_AS_DEFAULT),
-                                                           fi[i]->column_size > 0 ? fi[i]->column_size : pgtype_column_size(s.stmt, fieldtype, i, ci->drivers.unknown_sizes),
+                   pgtype_to_concise_type(s.stmt, fieldtype, i, unknown_sizes),
+                                                           fi[i]->column_size > 0 ? fi[i]->column_size : pgtype_column_size(s.stmt, fieldtype, i, unknown_sizes),
                    (SQLSMALLINT) fi[i]->decimal_digits,
                    bindings[i].buffer,
                    bindings[i].buflen,
index 734a304778a3565a51052182777c9744681a63e5..2a66e2e6c93a7435d7144f872cbc1eaf98c68b43 100644 (file)
@@ -1,35 +1,3 @@
-Running tests with UnknownSizes=-1;MaxVarcharSize=100...
-connected
-Testing SQLColAttribute...
-
--- Column 1: intcol --
-SQL_DESC_OCTET_LENGTH: 0
-SQL_DESC_TYPE_NAME: int4
-
--- Column 2: textcol --
-SQL_DESC_OCTET_LENGTH: 49140
-SQL_DESC_TYPE_NAME: text
-
--- Column 3: unknowncol --
-SQL_DESC_OCTET_LENGTH: 100
-SQL_DESC_TYPE_NAME: unknown
-
--- Column 4: varcharcol --
-SQL_DESC_OCTET_LENGTH: 100
-SQL_DESC_TYPE_NAME: varchar
-
--- Column 5: empty_varchar_col --
-SQL_DESC_OCTET_LENGTH: 100
-SQL_DESC_TYPE_NAME: varchar
-
--- Column 6: varchar5col --
-SQL_DESC_OCTET_LENGTH: 30
-SQL_DESC_TYPE_NAME: varchar
-
--- Column 7: interval --
-SQL_DESC_OCTET_LENGTH: 0
-SQL_DESC_TYPE_NAME: interval day to second
-disconnecting
 Running tests with UnknownSizes=0;MaxVarcharSize=100...
 connected
 Testing SQLColAttribute...
index 5d533b6057e4f54548a7ef97076a9e3000ce03c8..8e4ee26a41a4f44d2ea6243a9cf0b8e4f8132cf4 100644 (file)
@@ -1,35 +1,3 @@
-Running tests with UnknownSizes=-1;MaxVarcharSize=100...
-connected
-Testing SQLColAttribute...
-
--- Column 1: intcol --
-SQL_DESC_OCTET_LENGTH: 0
-SQL_DESC_TYPE_NAME: int4
-
--- Column 2: textcol --
-SQL_DESC_OCTET_LENGTH: 8190
-SQL_DESC_TYPE_NAME: text
-
--- Column 3: unknowncol --
-SQL_DESC_OCTET_LENGTH: 100
-SQL_DESC_TYPE_NAME: unknown
-
--- Column 4: varcharcol --
-SQL_DESC_OCTET_LENGTH: 100
-SQL_DESC_TYPE_NAME: varchar
-
--- Column 5: empty_varchar_col --
-SQL_DESC_OCTET_LENGTH: 100
-SQL_DESC_TYPE_NAME: varchar
-
--- Column 6: varchar5col --
-SQL_DESC_OCTET_LENGTH: 5
-SQL_DESC_TYPE_NAME: varchar
-
--- Column 7: interval --
-SQL_DESC_OCTET_LENGTH: 0
-SQL_DESC_TYPE_NAME: interval day to second
-disconnecting
 Running tests with UnknownSizes=0;MaxVarcharSize=100...
 connected
 Testing SQLColAttribute...
index fb963dbacc8a7d28c294c1fb90b7c6a0e92ddab7..da5cc96fb7e3252c0aae8957f99744ab4d6c096f 100644 (file)
@@ -1,35 +1,3 @@
-Running tests with UnknownSizes=-1;MaxVarcharSize=100...
-connected
-Testing SQLColAttribute...
-
--- Column 1: intcol --
-SQL_DESC_OCTET_LENGTH: 0
-SQL_DESC_TYPE_NAME: int4
-
--- Column 2: textcol --
-SQL_DESC_OCTET_LENGTH: 16380
-SQL_DESC_TYPE_NAME: text
-
--- Column 3: unknowncol --
-SQL_DESC_OCTET_LENGTH: 200
-SQL_DESC_TYPE_NAME: unknown
-
--- Column 4: varcharcol --
-SQL_DESC_OCTET_LENGTH: 200
-SQL_DESC_TYPE_NAME: varchar
-
--- Column 5: empty_varchar_col --
-SQL_DESC_OCTET_LENGTH: 200
-SQL_DESC_TYPE_NAME: varchar
-
--- Column 6: varchar5col --
-SQL_DESC_OCTET_LENGTH: 10
-SQL_DESC_TYPE_NAME: varchar
-
--- Column 7: interval --
-SQL_DESC_OCTET_LENGTH: 0
-SQL_DESC_TYPE_NAME: interval day to second
-disconnecting
 Running tests with UnknownSizes=0;MaxVarcharSize=100...
 connected
 Testing SQLColAttribute...
index b4ea5708bb284079fa7e2da2197edb25a6657164..eadb3577cf5d0f5d647e2b8769a75d9189061434 100644 (file)
@@ -69,7 +69,7 @@ int main(int argc, char **argv)
     * The output of these tests depend on the UnknownSizes and
     * MaxVarcharSize parameters
     */
-   runtest("UnknownSizes=-1;MaxVarcharSize=100");
+   // runtest("UnknownSizes=-1;MaxVarcharSize=100"); meaningless
    runtest("UnknownSizes=0;MaxVarcharSize=100");
    runtest("UnknownSizes=1;MaxVarcharSize=100");
    runtest("UnknownSizes=2;MaxVarcharSize=100");