tdbc::odbc

Artifact [d220489d64]
Login

Artifact d220489d64df1936739baa7c643747d6c660fe16dbc00eba450d3757ceb6cfb8:

Attachment "introspect.patch" to ticket [a792865057] added by chw 2020-07-23 04:33:47.
Index: generic/tdbcodbc.c
==================================================================
--- generic/tdbcodbc.c
+++ generic/tdbcodbc.c
@@ -2208,17 +2208,18 @@
  *
  *	Private method that informs the code whether the connection supports
  *	64-bit ints.
  *
  * Usage:
- *	$connection HasBigint boolean
+ *	$connection HasBigint ?boolean?
  *
  * Parameters:
- *	boolean - 1 if the connection supports BIGINT, 0 otherwise
+ *	boolean - 1 if the connection supports BIGINT, 0 otherwise,
+ *		  if omitted, return current state
  *
  * Results:
- *	Returns an empty Tcl result.
+ *	Returns an empty Tcl result or boolean current state.
  *
  *-----------------------------------------------------------------------------
  */
 
 static int
@@ -2237,12 +2238,17 @@
     int flag;
     (void)dummy;
 
     /* Check parameters */
 
+    if (objc == 2) {
+	Tcl_SetObjResult(interp, Tcl_NewWideIntObj(
+		(cdata->flags & CONNECTION_FLAG_HAS_BIGINT) ? 1 : 0));
+	return TCL_OK;
+    }
     if (objc != 3) {
-	Tcl_WrongNumArgs(interp, 2, objv, "flag");
+	Tcl_WrongNumArgs(interp, 2, objv, "?flag?");
 	return TCL_ERROR;
     }
     if (Tcl_GetBooleanFromObj(interp, objv[2], &flag) != TCL_OK) {
 	return TCL_ERROR;
     }
@@ -2261,17 +2267,18 @@
  *
  *	Private method that informs the code whether the connection supports
  *	WVARCHAR strings.
  *
  * Usage:
- *	$connection HasWvarchar boolean
+ *	$connection HasWvarchar ?boolean?
  *
  * Parameters:
  *	boolean - 1 if the connection supports WVARCHAR, 0 otherwise
+ *		  if omitted, return current state
  *
  * Results:
- *	Returns an empty Tcl result.
+ *	Returns an empty Tcl result or boolean current state.
  *
  *-----------------------------------------------------------------------------
  */
 
 static int
@@ -2290,12 +2297,17 @@
     int flag;
     (void)dummy;
 
     /* Check parameters */
 
+    if (objc == 2) {
+	Tcl_SetObjResult(interp, Tcl_NewWideIntObj(
+		(cdata->flags & CONNECTION_FLAG_HAS_WVARCHAR) ? 1 : 0));
+	return TCL_OK;
+    }
     if (objc != 3) {
-	Tcl_WrongNumArgs(interp, 2, objv, "flag");
+	Tcl_WrongNumArgs(interp, 2, objv, "?flag?");
 	return TCL_ERROR;
     }
     if (Tcl_GetBooleanFromObj(interp, objv[2], &flag) != TCL_OK) {
 	return TCL_ERROR;
     }