Add an option *Numeric(without precision) as*.
INI_LOWERCASEIDENTIFIER "=%d;"
"%s" /* INI_PQOPT */
"%s" /* INIKEEPALIVE TIME/INTERVAL */
+ INI_NUMERIC_AS "=%d;"
#ifdef _HANDLE_ENLIST_IN_DTC_
INI_XAOPT "=%d" /* XAOPT */
#endif /* _HANDLE_ENLIST_IN_DTC_ */
,ci->lower_case_identifier
,makeBracketConnectString(ci->pqopt_in_str, &pqoptStr, ci->pqopt, INI_PQOPT)
,makeKeepaliveConnectString(keepaliveStr, sizeof(keepaliveStr), ci, FALSE)
+ ,ci->numeric_as
#ifdef _HANDLE_ENLIST_IN_DTC_
,ci->xa_opt
#endif /* _HANDLE_ENLIST_IN_DTC_ */
ABBR_EXTRASYSTABLEPREFIXES "=%s;"
"%s" /* ABBR_PQOPT */
"%s" /* ABBRKEEPALIVE TIME/INTERVAL */
+ INI_NUMERIC_AS "=%d;"
#ifdef _HANDLE_ENLIST_IN_DTC_
"%s"
#endif /* _HANDLE_ENLIST_IN_DTC_ */
ci->drivers.extra_systable_prefixes,
makeBracketConnectString(ci->pqopt_in_str, &pqoptStr, ci->pqopt, ABBR_PQOPT),
makeKeepaliveConnectString(keepaliveStr, sizeof(keepaliveStr), ci, TRUE),
+ ci->numeric_as,
#ifdef _HANDLE_ENLIST_IN_DTC_
makeXaOptConnectString(xaOptStr, sizeof(xaOptStr), ci, TRUE),
#endif /* _HANDLE_ENLIST_IN_DTC_ */
ci->true_is_minus1 = atoi(value);
else if (stricmp(attribute, INI_INT8AS) == 0)
ci->int8_as = atoi(value);
+ else if (stricmp(attribute, INI_NUMERIC_AS) == 0)
+ ci->numeric_as = atoi(value);
else if (stricmp(attribute, INI_BYTEAASLONGVARBINARY) == 0 || stricmp(attribute, ABBR_BYTEAASLONGVARBINARY) == 0)
ci->bytea_as_longvarbinary = atoi(value);
else if (stricmp(attribute, INI_USESERVERSIDEPREPARE) == 0 || stricmp(attribute, ABBR_USESERVERSIDEPREPARE) == 0)
ci->lf_conversion = DEFAULT_LFCONVERSION;
ci->true_is_minus1 = DEFAULT_TRUEISMINUS1;
ci->int8_as = DEFAULT_INT8AS;
+ ci->numeric_as = DEFAULT_NUMERIC_AS;
ci->bytea_as_longvarbinary = DEFAULT_BYTEAASLONGVARBINARY;
ci->use_server_side_prepare = DEFAULT_USESERVERSIDEPREPARE;
ci->lower_case_identifier = DEFAULT_LOWERCASEIDENTIFIER;
if (SQLGetPrivateProfileString(DSN, INI_INT8AS, NULL_STRING, temp, sizeof(temp), ODBC_INI) > 0)
ci->int8_as = atoi(temp);
+ if (SQLGetPrivateProfileString(DSN, INI_NUMERIC_AS, NULL_STRING, temp, sizeof(temp), ODBC_INI) > 0)
+ ci->numeric_as = atoi(temp);
+
if (SQLGetPrivateProfileString(DSN, INI_BYTEAASLONGVARBINARY, NULL_STRING, temp, sizeof(temp), ODBC_INI) > 0)
ci->bytea_as_longvarbinary = atoi(temp);
INI_INT8AS,
temp,
ODBC_INI);
+ ITOA_FIXED(temp, ci->numeric_as);
+ SQLWritePrivateProfileString(DSN,
+ INI_NUMERIC_AS,
+ temp,
+ ODBC_INI);
SPRINTF_FIXED(temp, "%x", getExtraOptions(ci));
SQLWritePrivateProfileString(DSN,
INI_EXTRAOPTIONS,
conninfo->lf_conversion = -1;
conninfo->true_is_minus1 = -1;
conninfo->int8_as = -101;
+ conninfo->numeric_as = DEFAULT_NUMERIC_AS;
conninfo->bytea_as_longvarbinary = -1;
conninfo->use_server_side_prepare = -1;
conninfo->lower_case_identifier = -1;
CORR_VALCPY(lf_conversion);
CORR_VALCPY(true_is_minus1);
CORR_VALCPY(int8_as);
+ CORR_VALCPY(numeric_as);
CORR_VALCPY(bytea_as_longvarbinary);
CORR_VALCPY(use_server_side_prepare);
CORR_VALCPY(lower_case_identifier);
#define INI_TRUEISMINUS1 "TrueIsMinus1"
#define ABBR_TRUEISMINUS1 "C6"
#define INI_INT8AS "BI"
+#define INI_NUMERIC_AS "D6"
#define INI_BYTEAASLONGVARBINARY "ByteaAsLongVarBinary"
#define ABBR_BYTEAASLONGVARBINARY "C7"
#define INI_USESERVERSIDEPREPARE "UseServerSidePrepare"
#define DEFAULT_USESERVERSIDEPREPARE 1
#define DEFAULT_LOWERCASEIDENTIFIER 0
#define DEFAULT_SSLMODE SSLMODE_DISABLE
+#define DEFAULT_NUMERIC_AS (-101)
#ifdef _HANDLE_ENLIST_IN_DTC_
#define DEFAULT_XAOPT 1
else
ci->int8_as = SQL_VARCHAR;
+ /* Numeric without precision As */
+ if (IsDlgButtonChecked(hdlg, DS_NUMERIC_AS_NUMERIC))
+ ci->numeric_as = SQL_NUMERIC;
+ else if (IsDlgButtonChecked(hdlg, DS_NUMERIC_AS_DOUBLE))
+ ci->numeric_as = SQL_DOUBLE;
+ else if (IsDlgButtonChecked(hdlg, DS_NUMERIC_AS_VARCHAR))
+ ci->numeric_as = SQL_VARCHAR;
+ else if (IsDlgButtonChecked(hdlg, DS_NUMERIC_AS_LONGVARCHAR))
+ ci->numeric_as = SQL_LONGVARCHAR;
+ else
+ ci->numeric_as = DEFAULT_NUMERIC_AS;
+
GetDlgItemText(hdlg, DS_EXTRA_OPTIONS, buf, sizeof(buf));
setExtraOptions(ci, buf, NULL);
ITOA_FIXED(ci->show_system_tables, IsDlgButtonChecked(hdlg, DS_SHOWSYSTEMTABLES));
default:
CheckDlgButton(hdlg, DS_INT8_AS_DEFAULT, 1);
}
+ /* Numeric As */
+ switch (ci->numeric_as)
+ {
+ case SQL_NUMERIC:
+ CheckDlgButton(hdlg, DS_NUMERIC_AS_NUMERIC, 1);
+ break;
+ case SQL_VARCHAR:
+ CheckDlgButton(hdlg, DS_NUMERIC_AS_VARCHAR, 1);
+ break;
+ case SQL_DOUBLE:
+ CheckDlgButton(hdlg, DS_NUMERIC_AS_DOUBLE, 1);
+ break;
+ case SQL_LONGVARCHAR:
+ CheckDlgButton(hdlg, DS_NUMERIC_AS_LONGVARCHAR, 1);
+ break;
+ default:
+ CheckDlgButton(hdlg, DS_NUMERIC_AS_DEFAULT, 1);
+ }
SPRINTF_FIXED(buf, "0x%x", getExtraOptions(ci));
SetDlgItemText(hdlg, DS_EXTRA_OPTIONS, buf);
getNumericColumnSizeX(const ConnectionClass *conn, OID type, int atttypmod, int adtsize_or_longest, int handle_unknown_size_as)
{
Int4 default_column_size = 28;
+ const ConnInfo *ci = &(conn->connInfo);
MYLOG(0, "entering type=%d, typmod=%d\n", type, atttypmod);
if (atttypmod > -1)
return (atttypmod >> 16) & 0xffff;
+ switch (ci->numeric_as)
+ {
+ case SQL_VARCHAR:
+ return ci->drivers.max_varchar_size;
+ case SQL_LONGVARCHAR:
+ return ci->drivers.max_longvarchar_size;
+ case SQL_DOUBLE:
+ return PG_DOUBLE_DIGITS;
+ }
switch (handle_unknown_size_as)
{
case UNKNOWNS_AS_DONTKNOW:
return SQL_BIGINT;
case PG_TYPE_NUMERIC:
+ if (-1 == atttypmod && DEFAULT_NUMERIC_AS != ci->numeric_as)
+ return ci->numeric_as;
return SQL_NUMERIC;
case PG_TYPE_FLOAT4:
signed char ignore_round_trip_time;
signed char disable_keepalive;
signed char wcs_debug;
+ signed char numeric_as;
UInt4 extra_opts;
Int4 keepalive_idle;
Int4 keepalive_interval;
WS_TABSTOP,227,108,29,10
LTEXT "\93Á\95Ê\82È\83I\83v\83V\83\87\83\93",IDC_STATIC,227,158,66,8
EDITTEXT DS_EXTRA_OPTIONS,227,168,35,14,ES_AUTOHSCROLL
- GROUPBOX "\83G\83\89\81[\8e\9e\82Ì\83\8d\81[\83\8b\83o\83b\83N\94\8ds",IDC_STATIC,160,128,130,25
+ GROUPBOX "Numeric(\90¸\93x\8ew\92è\82È\82µ) \82Ì\91ã\91Ö\92è\8b`",IDC_STATIC,5,128,160,25
+ CONTROL "default",DS_NUMERIC_AS_DEFAULT,"Button",BS_AUTORADIOBUTTON |
+ WS_GROUP,12,140,40,10
+// CONTROL "numeric",DS_NUMERIC_AS_NUMERIC,"Button",BS_AUTORADIOBUTTON |
+// WS_TABSTOP,50,140,40,10
+ CONTROL "memo",DS_NUMERIC_AS_LONGVARCHAR,"Button",BS_AUTORADIOBUTTON |
+ WS_TABSTOP,126,140,40,10
+ CONTROL "varchar",DS_NUMERIC_AS_VARCHAR,"Button",BS_AUTORADIOBUTTON |
+ WS_TABSTOP,50,140,40,10
+ CONTROL "double",DS_NUMERIC_AS_DOUBLE,"Button",BS_AUTORADIOBUTTON |
+ WS_TABSTOP,90,140,36,10
+ GROUPBOX "\83G\83\89\81[\8e\9e\82Ì\83\8d\81[\83\8b\83o\83b\83N\94\8ds",IDC_STATIC,170,128,130,25
CONTROL "\96³\82µ",DS_NO_ROLLBACK,"Button",BS_AUTORADIOBUTTON |
- WS_GROUP,165,139,30,10
+ WS_GROUP,175,139,30,10
CONTROL "\91S·¬Ý¾Ù",DS_TRANSACTION_ROLLBACK,"Button",
- BS_AUTORADIOBUTTON | WS_TABSTOP,195,140,50,10
+ BS_AUTORADIOBUTTON | WS_TABSTOP,205,140,50,10
CONTROL "\95¶\92P\88Ê",DS_STATEMENT_ROLLBACK,"Button",
- BS_AUTORADIOBUTTON | WS_TABSTOP,250,140,35,10
+ BS_AUTORADIOBUTTON | WS_TABSTOP,260,140,35,10
GROUPBOX "OID \83I\83v\83V\83\87\83\93",IDC_STATIC,5,158,206,25
CONTROL "\83J\83\89\83\80\97ñ\95\\8e¦(&C)",DS_SHOWOIDCOLUMN,"Button",
BS_AUTOCHECKBOX | WS_GROUP,16,169,72,10
WS_TABSTOP,227,107,29,10
LTEXT "Extra Opts",IDC_STATIC,264,98,40,17
EDITTEXT DS_EXTRA_OPTIONS,264,105,40,12,ES_AUTOHSCROLL
+ GROUPBOX "Numeric(without precision) As",IDC_STATIC,5,126,160,25
+ CONTROL "default",DS_NUMERIC_AS_DEFAULT,"Button",BS_AUTORADIOBUTTON |
+ WS_GROUP,12,138,40,10
+// CONTROL "numeric",DS_NUMERIC_AS_NUMERIC,"Button",BS_AUTORADIOBUTTON |
+// WS_TABSTOP,50,138,40,10
+ CONTROL "memo",DS_NUMERIC_AS_LONGVARCHAR,"Button",BS_AUTORADIOBUTTON |
+ WS_TABSTOP,126,138,40,10
+ CONTROL "varchar",DS_NUMERIC_AS_VARCHAR,"Button",BS_AUTORADIOBUTTON |
+ WS_TABSTOP,50,138,40,10
+ CONTROL "double",DS_NUMERIC_AS_DOUBLE,"Button",BS_AUTORADIOBUTTON |
+ WS_TABSTOP,90,138,36,10
GROUPBOX "OID Options",IDC_STATIC,5,157,296,25
CONTROL "Show &Column",DS_SHOWOIDCOLUMN,"Button",BS_AUTOCHECKBOX |
WS_GROUP | WS_TABSTOP,13,168,67,10
DEFPUSHBUTTON "OK",IDOK,5,ENDLINE_Y,50,14,WS_GROUP
PUSHBUTTON "Cancel",IDCANCEL,81,ENDLINE_Y,50,14
PUSHBUTTON "Apply",IDAPPLY,156,ENDLINE_Y,50,14
- GROUPBOX "Level of rollback on errors",IDC_STATIC,147,126,154,25
+ GROUPBOX "Level of rollback on errors",IDC_STATIC,172,126,134,25
CONTROL "Nop",DS_NO_ROLLBACK,"Button",BS_AUTORADIOBUTTON |
- WS_GROUP,151,138,36,9
+ WS_GROUP,176,138,36,9
CONTROL "Transaction",DS_TRANSACTION_ROLLBACK,"Button",
- BS_AUTORADIOBUTTON | WS_TABSTOP,186,138,57,9
+ BS_AUTORADIOBUTTON | WS_TABSTOP,206,138,57,9
CONTROL "Statement",DS_STATEMENT_ROLLBACK,"Button",
- BS_AUTORADIOBUTTON | WS_TABSTOP,247,138,47,9
+ BS_AUTORADIOBUTTON | WS_TABSTOP,257,138,47,9
END
#undef DTC_GRP_X
#define DS_LIBPQOPT 1104
#define DS_COMMLOG 1105
#define DS_DEBUG 1106
+#define DS_NUMERIC_AS_DEFAULT 1107
+#define DS_NUMERIC_AS_NUMERIC 1108
+#define DS_NUMERIC_AS_VARCHAR 1109
+#define DS_NUMERIC_AS_DOUBLE 1110
+#define DS_NUMERIC_AS_LONGVARCHAR 1111
// Next default values for new objects
//
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 106
#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1107
+#define _APS_NEXT_CONTROL_VALUE 1112
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif