if (conn)
conn->stmtOptions.scroll_concurrency = setval;
else if (stmt)
- stmt->options.scroll_concurrency = setval;
+ {
+ if (SC_get_Result(stmt))
+ {
+ SC_set_error(stmt, STMT_INVALID_CURSOR_STATE_ERROR, "The attr can't be changed because the cursor is open.");
+ SC_log_error(func, "", stmt);
+ return SQL_ERROR;
+ }
+ stmt->options.scroll_concurrency =
+ stmt->options_orig.scroll_concurrency = setval;
+ }
if (setval != vParam)
changed = TRUE;
mylog("-> %d\n", setval);
if (conn)
conn->stmtOptions.cursor_type = setval;
else if (stmt)
+ {
+ if (SC_get_Result(stmt))
+ {
+ SC_set_error(stmt, STMT_INVALID_CURSOR_STATE_ERROR, "The attr can't be changed because the cursor is open.");
+ SC_log_error(func, "", stmt);
+ return SQL_ERROR;
+ }
+ stmt->options_orig.cursor_type =
stmt->options.cursor_type = setval;
+ }
if (setval != vParam)
changed = TRUE;
mylog("-> %d\n", setval);
if (conn)
conn->stmtOptions.keyset_size = vParam;
if (stmt)
- stmt->options.keyset_size = vParam;
+ {
+ stmt->options_orig.keyset_size = vParam;
+ if (!SC_get_Result(stmt))
+ stmt->options.keyset_size = vParam;
+ if (stmt->options.keyset_size != (int)vParam)
+ changed = TRUE;
+ }
break;
if (conn)
conn->stmtOptions.maxLength = vParam;
if (stmt)
- stmt->options.maxLength = vParam;
+ {
+ stmt->options_orig.maxLength = vParam;
+ if (!SC_get_Result(stmt))
+ stmt->options.maxLength = vParam;
+ if (stmt->options.maxLength != (int)vParam)
+ changed = TRUE;
+ }
break;
case SQL_MAX_ROWS: /* ignored, but saved */
if (conn)
conn->stmtOptions.maxRows = vParam;
if (stmt)
- stmt->options.maxRows = vParam;
+ {
+ stmt->options_orig.maxRows = vParam;
+ if (!SC_get_Result(stmt))
+ stmt->options.maxRows = vParam;
+ if (stmt->options.maxRows != (int)vParam)
+ changed = TRUE;
+ }
break;
case SQL_NOSCAN: /* ignored */
*phstmt = (HSTMT) stmt;
/* Copy default statement options based from Connection options */
- stmt->options = conn->stmtOptions;
+ stmt->options = stmt->options_orig = conn->stmtOptions;
stmt->ardopts = conn->ardOptions;
stmt->ardopts.bookmark = (BindInfoClass *) malloc(sizeof(BindInfoClass));
stmt->ardopts.bookmark->buffer = NULL;
if (self->load_statement)
free(self->load_statement);
self->load_statement = NULL;
+ /*
+ * reset the current attr setting to the original one.
+ */
+ self->options.scroll_concurrency = self->options_orig.scroll_concurrency;
+ self->options.cursor_type = self->options_orig.cursor_type;
+ self->options.keyset_size = self->options_orig.keyset_size;
+ self->options.maxLength = self->options_orig.maxLength;
+ self->options.maxRows = self->options_orig.maxRows;
return TRUE;
}