ResultSet_T MysqlPreparedStatement_executeQuery(T P) { assert(P); if (P->parameterCount > 0) if ((P->lastError = mysql_stmt_bind_param(P->stmt, P->bind))) THROW(SQLException, "%s", mysql_stmt_error(P->stmt)); #if MYSQL_VERSION_ID >= 50002 unsigned long cursor = CURSOR_TYPE_READ_ONLY; mysql_stmt_attr_set(P->stmt, STMT_ATTR_CURSOR_TYPE, &cursor); #endif if ((P->lastError = mysql_stmt_execute(P->stmt))) THROW(SQLException, "%s", mysql_stmt_error(P->stmt)); if (P->lastError == MYSQL_OK) return ResultSet_new(MysqlResultSet_new(P->stmt, P->maxRows, true), (Rop_T)&mysqlrops); THROW(SQLException, "%s", mysql_stmt_error(P->stmt)); return NULL; }
ResultSet_T MysqlConnection_executeQuery(T C, const char *sql, va_list ap) { va_list ap_copy; MYSQL_STMT *stmt = NULL; assert(C); StringBuffer_clear(C->sb); va_copy(ap_copy, ap); StringBuffer_vappend(C->sb, sql, ap_copy); va_end(ap_copy); if (prepare(C, StringBuffer_toString(C->sb), StringBuffer_length(C->sb), &stmt)) { #if MYSQL_VERSION_ID >= 50002 unsigned long cursor = CURSOR_TYPE_READ_ONLY; mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, &cursor); #endif if ((C->lastError = mysql_stmt_execute(stmt))) { StringBuffer_clear(C->sb); StringBuffer_append(C->sb, "%s", mysql_stmt_error(stmt)); mysql_stmt_close(stmt); } else return ResultSet_new(MysqlResultSet_new(stmt, C->maxRows, false), (Rop_T)&mysqlrops); } return NULL; }