Changeset: 327b159772ee for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/327b159772ee
Modified Files:
sql/storage/store.c
Branch: sql_profiler
Log Message:
Merge with default.
diffs (truncated from 932 to 300 lines):
diff --git a/clients/odbc/driver/ODBCError.c b/clients/odbc/driver/ODBCError.c
--- a/clients/odbc/driver/ODBCError.c
+++ b/clients/odbc/driver/ODBCError.c
@@ -43,7 +43,7 @@ const char ODBCErrorMsgPrefix[] = "[Mone
const int ODBCErrorMsgPrefixLength = (int) sizeof(ODBCErrorMsgPrefix) - 1;
/*
- * Local utility function which retuns the standard ODBC/ISO error
+ * Local utility function which returns the standard ODBC/ISO error
* message text for a given ISO SQLState code.
* When no message could be found for a given SQLState a msg is
* printed to stderr to warn that the programmer has forgotten to
diff --git a/clients/odbc/driver/SQLSetStmtAttr.c
b/clients/odbc/driver/SQLSetStmtAttr.c
--- a/clients/odbc/driver/SQLSetStmtAttr.c
+++ b/clients/odbc/driver/SQLSetStmtAttr.c
@@ -267,14 +267,7 @@ MNDBSetStmtAttr(ODBCStmt *stmt,
}
break;
- case SQL_ATTR_ROW_NUMBER: /* SQLULEN */
- /* read-only attribute */
- default:
- /* Invalid attribute/option identifier */
- addStmtError(stmt, "HY092", NULL, 0);
- return SQL_ERROR;
-
- /* TODO: implement requested behavior */
+ /* TODO: implement requested behavior */
case SQL_ATTR_ASYNC_ENABLE: /* SQLULEN */
#ifdef SQL_ATTR_ASYNC_STMT_EVENT
case SQL_ATTR_ASYNC_STMT_EVENT: /* SQLPOINTER */
@@ -293,6 +286,13 @@ MNDBSetStmtAttr(ODBCStmt *stmt,
/* Optional feature not implemented */
addStmtError(stmt, "HYC00", NULL, 0);
return SQL_ERROR;
+
+ case SQL_ATTR_ROW_NUMBER: /* SQLULEN */
+ /* invalid attribute, can only be used with SQLGetStmtAttr */
+ default:
+ /* Invalid attribute/option identifier */
+ addStmtError(stmt, "HY092", NULL, 0);
+ return SQL_ERROR;
}
return stmt->Error ? SQL_SUCCESS_WITH_INFO : SQL_SUCCESS;
diff --git a/clients/odbc/tests/ODBCmetadata.c
b/clients/odbc/tests/ODBCmetadata.c
--- a/clients/odbc/tests/ODBCmetadata.c
+++ b/clients/odbc/tests/ODBCmetadata.c
@@ -94,6 +94,7 @@ compareResult(SQLHANDLE stmt, SQLRETURN
{
SQLRETURN ret;
SQLSMALLINT columns; /* Number of columns in result-set */
+ SQLLEN rows; /* Number of rows in result-set */
size_t expct_len = strlen(expected);
size_t outp_len = expct_len + 10000;
char * outp = malloc(outp_len);
@@ -115,6 +116,11 @@ compareResult(SQLHANDLE stmt, SQLRETURN
check(ret, SQL_HANDLE_STMT, stmt, "SQLNumResultCols()");
pos += snprintf(outp + pos, outp_len - pos, "Resultset with %d
columns\n", columns);
+ /* How many rows are there */
+ ret = SQLRowCount(stmt, &rows);
+ check(ret, SQL_HANDLE_STMT, stmt, "SQLRowCount()");
+ pos += snprintf(outp + pos, outp_len - pos, "Resultset with %ld
rows\n", rows);
+
/* get Result Column Names and print them */
for (col = 1; col <= columns; col++) {
ret = SQLDescribeCol(stmt, col, (SQLCHAR *) buf, sizeof(buf),
@@ -221,6 +227,8 @@ main(int argc, char **argv)
, SQL_NTS);
check(ret, SQL_HANDLE_DBC, dbc, "SQLExecDirect (create and set schema
script)");
+ // create tables to populate catalog. Used for testing SQLTables(),
+ // SQLColumns(), SQLSpecialColumns(), SQLPrimaryKeys() and
SQLForeignKeys()
ret = SQLExecDirect(stmt, (SQLCHAR *)
"CREATE TABLE odbctst.pk_uc (id1 INT NOT NULL PRIMARY KEY,
name1 VARCHAR(99) UNIQUE);\n"
"CREATE LOCAL TEMP TABLE tmp.tmp_pk_uc (id1 INT NOT NULL
PRIMARY KEY, name1 VARCHAR(99) UNIQUE);\n"
@@ -240,6 +248,7 @@ main(int argc, char **argv)
, SQL_NTS);
check(ret, SQL_HANDLE_DBC, dbc, "SQLExecDirect (create tables script)");
+ // create indexes to populate catalog. Used for testing SQLStatistics()
ret = SQLExecDirect(stmt, (SQLCHAR *)
"CREATE INDEX pk_uc_i ON odbctst.pk_uc (id1, name1);\n"
"CREATE INDEX tmp_pk_uc_i ON tmp.tmp_pk_uc (id1, name1);\n"
@@ -250,6 +259,7 @@ main(int argc, char **argv)
, SQL_NTS);
check(ret, SQL_HANDLE_DBC, dbc, "SQLExecDirect (create indices
script)");
+ // grant privileges to populate catalog. Used for testing
SQLTablePrivileges() and SQLColumnPrivileges()
ret = SQLExecDirect(stmt, (SQLCHAR *)
"GRANT SELECT ON TABLE odbctst.pk_uc TO PUBLIC;\n"
"GRANT INSERT, UPDATE, DELETE ON TABLE odbctst.pk_uc TO
monetdb;\n"
@@ -266,6 +276,7 @@ main(int argc, char **argv)
check(ret, SQL_HANDLE_DBC, dbc, "SQLExecDirect (add privileges
script)");
// TODO add user procedures / functions to test SQLProcedures() and
SQLProcedureColumns() more
+ // TODO add SQL COMMENT to tables, columns, indexes, procedures,
functions to fetch (and test) data in the REMARKS result column
/* run actual metadata query tests */
// All catalogs query
@@ -274,6 +285,7 @@ main(int argc, char **argv)
(SQLCHAR*)"", SQL_NTS);
compareResult(stmt, ret, "SQLTables (SQL_ALL_CATALOGS)",
"Resultset with 5 columns\n"
+ "Resultset with 1 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE
REMARKS\n"
"mTests_sql_odbc_tests NULL NULL NULL NULL\n");
@@ -283,6 +295,7 @@ main(int argc, char **argv)
(SQLCHAR*)"", SQL_NTS, (SQLCHAR*)"", SQL_NTS);
compareResult(stmt, ret, "SQLTables (SQL_ALL_SCHEMAS)",
"Resultset with 5 columns\n"
+ "Resultset with 8 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE
REMARKS\n"
"NULL json NULL NULL NULL\n"
"NULL logging NULL NULL NULL\n"
@@ -299,6 +312,7 @@ main(int argc, char **argv)
(SQLCHAR*)SQL_ALL_TABLE_TYPES, SQL_NTS);
compareResult(stmt, ret, "SQLTables (SQL_ALL_TABLE_TYPES)",
"Resultset with 5 columns\n"
+ "Resultset with 10 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE
REMARKS\n"
"NULL NULL NULL GLOBAL TEMPORARY TABLE NULL\n"
"NULL NULL NULL LOCAL TEMPORARY TABLE NULL\n"
@@ -314,9 +328,10 @@ main(int argc, char **argv)
// All tables in schema odbctst
ret = SQLTables(stmt, (SQLCHAR*)"", SQL_NTS,
(SQLCHAR*)"odbctst", SQL_NTS, (SQLCHAR*)"%", SQL_NTS,
- (SQLCHAR*)"TABLE, VIEW, SYSTEM TABLE, GLOBAL TEMPORARY
TABLE, LOCAL TEMPORARY TABLE, ALIAS, SYNONYM", SQL_NTS);
+ (SQLCHAR*)"TABLE,VIEW,SYSTEM TABLE,GLOBAL TEMPORARY
TABLE,LOCAL TEMPORARY TABLE,ALIAS,SYNONYM", SQL_NTS);
compareResult(stmt, ret, "SQLTables (odbctst, %)",
"Resultset with 5 columns\n"
+ "Resultset with 7 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE
REMARKS\n"
"mTests_sql_odbc_tests odbctst CUSTOMERS TABLE NULL\n"
"mTests_sql_odbc_tests odbctst LINES TABLE NULL\n"
@@ -332,6 +347,7 @@ main(int argc, char **argv)
(SQLCHAR*)"TABLE, VIEW, GLOBAL TEMPORARY TABLE, LOCAL
TEMPORARY TABLE", SQL_NTS);
compareResult(stmt, ret, "SQLTables (%, %, TABLE, VIEW, GLOBAL
TEMPORARY TABLE, LOCAL TEMPORARY TABLE)",
"Resultset with 5 columns\n"
+ "Resultset with 11 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE
REMARKS\n"
"mTests_sql_odbc_tests tmp glbl_nopk_twoucs GLOBAL
TEMPORARY TABLE NULL\n"
"mTests_sql_odbc_tests tmp glbl_pk_uc GLOBAL
TEMPORARY TABLE NULL\n"
@@ -351,6 +367,7 @@ main(int argc, char **argv)
(SQLCHAR*)"%", SQL_NTS);
compareResult(stmt, ret, "SQLColumns (odbctst, %pk%, %)",
"Resultset with 18 columns\n"
+ "Resultset with 7 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME
DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS
NUM_PREC_RADIX NULLABLE REMARKS COLUMN_DEF SQL_DATA_TYPE
SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION
IS_NULLABLE\n"
"mTests_sql_odbc_tests odbctst nopk_twoucs id2 4
INTEGER 32 11 0 2 0 NULL NULL 4 NULL
NULL 1 NO\n"
"mTests_sql_odbc_tests odbctst nopk_twoucs name2 -9
VARCHAR 99 198 NULL NULL 1 NULL NULL -9 NULL
198 2 YES\n"
@@ -366,6 +383,7 @@ main(int argc, char **argv)
(SQLCHAR*)"%%", SQL_NTS);
compareResult(stmt, ret, "SQLColumns (tmp, %pk%, %%)",
"Resultset with 18 columns\n"
+ "Resultset with 8 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME
DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS
NUM_PREC_RADIX NULLABLE REMARKS COLUMN_DEF SQL_DATA_TYPE
SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION
IS_NULLABLE\n"
"mTests_sql_odbc_tests tmp glbl_nopk_twoucs id2
4 INTEGER 32 11 0 2 0 NULL NULL 4
NULL NULL 1 NO\n"
"mTests_sql_odbc_tests tmp glbl_nopk_twoucs name2
-9 VARCHAR 99 198 NULL NULL 1 NULL NULL -9
NULL 198 2 YES\n"
@@ -382,6 +400,7 @@ main(int argc, char **argv)
(SQLCHAR*)"name_", SQL_NTS);
compareResult(stmt, ret, "SQLColumns (tmp, %pk%, name_)",
"Resultset with 18 columns\n"
+ "Resultset with 4 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME
DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS
NUM_PREC_RADIX NULLABLE REMARKS COLUMN_DEF SQL_DATA_TYPE
SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION
IS_NULLABLE\n"
"mTests_sql_odbc_tests tmp glbl_nopk_twoucs name2
-9 VARCHAR 99 198 NULL NULL 1 NULL NULL -9
NULL 198 2 YES\n"
"mTests_sql_odbc_tests tmp glbl_pk_uc name1 -9
VARCHAR 99 198 NULL NULL 1 NULL NULL -9 NULL
198 2 YES\n"
@@ -393,6 +412,7 @@ main(int argc, char **argv)
(SQLCHAR*)"sys", SQL_NTS, (SQLCHAR*)"table_types",
SQL_NTS);
compareResult(stmt, ret, "SQLPrimaryKeys (sys, table_types)",
"Resultset with 6 columns\n"
+ "Resultset with 1 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME
KEY_SEQ PK_NAME\n"
"mTests_sql_odbc_tests sys table_types table_type_id
1 table_types_table_type_id_pkey\n");
@@ -401,6 +421,7 @@ main(int argc, char **argv)
SQL_SCOPE_SESSION, SQL_NO_NULLS);
compareResult(stmt, ret, "SQLSpecialColumns (sys, table_types)",
"Resultset with 8 columns\n"
+ "Resultset with 1 rows\n"
"SCOPE COLUMN_NAME DATA_TYPE TYPE_NAME
COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS PSEUDO_COLUMN\n"
"1 table_type_id 5 SMALLINT 16 6
0 1\n");
@@ -409,6 +430,7 @@ main(int argc, char **argv)
SQL_INDEX_UNIQUE, SQL_ENSURE);
compareResult(stmt, ret, "SQLStatistics (sys, table_types,
SQL_INDEX_UNIQUE, SQL_ENSURE)",
"Resultset with 13 columns\n"
+ "Resultset with 2 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME NON_UNIQUE
INDEX_QUALIFIER INDEX_NAME TYPE ORDINAL_POSITION COLUMN_NAME
ASC_OR_DESC CARDINALITY PAGES FILTER_CONDITION\n"
"mTests_sql_odbc_tests sys table_types 0 NULL
table_types_table_type_id_pkey 2 1 table_type_id NULL 10
NULL NULL\n"
"mTests_sql_odbc_tests sys table_types 0 NULL
table_types_table_type_name_unique 2 1 table_type_name NULL
10 NULL NULL\n");
@@ -418,6 +440,7 @@ main(int argc, char **argv)
SQL_INDEX_ALL, SQL_QUICK);
compareResult(stmt, ret, "SQLStatistics (sys, table_types,
SQL_INDEX_ALL, SQL_QUICK)",
"Resultset with 13 columns\n"
+ "Resultset with 2 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME NON_UNIQUE
INDEX_QUALIFIER INDEX_NAME TYPE ORDINAL_POSITION COLUMN_NAME
ASC_OR_DESC CARDINALITY PAGES FILTER_CONDITION\n"
"mTests_sql_odbc_tests sys table_types 0 NULL
table_types_table_type_id_pkey 2 1 table_type_id NULL 10
NULL NULL\n"
"mTests_sql_odbc_tests sys table_types 0 NULL
table_types_table_type_name_unique 2 1 table_type_name NULL
10 NULL NULL\n");
@@ -426,6 +449,7 @@ main(int argc, char **argv)
(SQLCHAR*)"sys", SQL_NTS, (SQLCHAR*)"table_types",
SQL_NTS);
compareResult(stmt, ret, "SQLTablePrivileges (sys, table_types)",
"Resultset with 7 columns\n"
+ "Resultset with 0 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME GRANTOR GRANTEE
PRIVILEGE IS_GRANTABLE\n");
ret = SQLColumnPrivileges(stmt, (SQLCHAR*)"", SQL_NTS,
@@ -433,6 +457,7 @@ main(int argc, char **argv)
(SQLCHAR*)"%", SQL_NTS);
compareResult(stmt, ret, "SQLColumnPrivileges (sys, table_types, %)",
"Resultset with 8 columns\n"
+ "Resultset with 0 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME
GRANTOR GRANTEE PRIVILEGE IS_GRANTABLE\n");
// odbctst.pk_uc
@@ -440,6 +465,7 @@ main(int argc, char **argv)
(SQLCHAR*)"odbctst", SQL_NTS, (SQLCHAR*)"pk_uc",
SQL_NTS);
compareResult(stmt, ret, "SQLPrimaryKeys (odbctst, pk_uc)",
"Resultset with 6 columns\n"
+ "Resultset with 1 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME
KEY_SEQ PK_NAME\n"
"mTests_sql_odbc_tests odbctst pk_uc id1 1
pk_uc_id1_pkey\n");
@@ -448,6 +474,7 @@ main(int argc, char **argv)
SQL_SCOPE_SESSION, SQL_NO_NULLS);
compareResult(stmt, ret, "SQLSpecialColumns (odbctst, pk_uc,
SQL_BEST_ROWID)",
"Resultset with 8 columns\n"
+ "Resultset with 1 rows\n"
"SCOPE COLUMN_NAME DATA_TYPE TYPE_NAME
COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS PSEUDO_COLUMN\n"
"1 id1 4 INTEGER 32 11 0 1\n");
@@ -456,6 +483,7 @@ main(int argc, char **argv)
SQL_SCOPE_SESSION, SQL_NO_NULLS);
compareResult(stmt, ret, "SQLSpecialColumns (odbctst, pk_uc,
SQL_ROWVER)",
"Resultset with 8 columns\n"
+ "Resultset with 0 rows\n"
"SCOPE COLUMN_NAME DATA_TYPE TYPE_NAME
COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS PSEUDO_COLUMN\n");
ret = SQLStatistics(stmt, (SQLCHAR*)"", SQL_NTS,
@@ -463,6 +491,7 @@ main(int argc, char **argv)
SQL_INDEX_UNIQUE, SQL_ENSURE);
compareResult(stmt, ret, "SQLStatistics (odbctst, pk_uc,
SQL_INDEX_UNIQUE, SQL_ENSURE)",
"Resultset with 13 columns\n"
+ "Resultset with 2 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME NON_UNIQUE
INDEX_QUALIFIER INDEX_NAME TYPE ORDINAL_POSITION COLUMN_NAME
ASC_OR_DESC CARDINALITY PAGES FILTER_CONDITION\n"
"mTests_sql_odbc_tests odbctst pk_uc 0 NULL
pk_uc_id1_pkey 2 1 id1 NULL 0 NULL NULL\n"
"mTests_sql_odbc_tests odbctst pk_uc 0 NULL
pk_uc_name1_unique 2 1 name1 NULL 0 NULL
NULL\n");
@@ -472,6 +501,7 @@ main(int argc, char **argv)
SQL_INDEX_ALL, SQL_QUICK);
compareResult(stmt, ret, "SQLStatistics (odbctst, pk_uc, SQL_INDEX_ALL,
SQL_QUICK)",
"Resultset with 13 columns\n"
+ "Resultset with 4 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME NON_UNIQUE
INDEX_QUALIFIER INDEX_NAME TYPE ORDINAL_POSITION COLUMN_NAME
ASC_OR_DESC CARDINALITY PAGES FILTER_CONDITION\n"
"mTests_sql_odbc_tests odbctst pk_uc 0 NULL
pk_uc_id1_pkey 2 1 id1 NULL 0 NULL NULL\n"
"mTests_sql_odbc_tests odbctst pk_uc 0 NULL
pk_uc_name1_unique 2 1 name1 NULL 0 NULL NULL\n"
@@ -482,6 +512,7 @@ main(int argc, char **argv)
(SQLCHAR*)"odbctst", SQL_NTS, (SQLCHAR*)"pk_uc",
SQL_NTS);
compareResult(stmt, ret, "SQLTablePrivileges (odbctst, pk_uc)",
"Resultset with 7 columns\n"
+ "Resultset with 4 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME GRANTOR GRANTEE
PRIVILEGE IS_GRANTABLE\n"
"mTests_sql_odbc_tests odbctst pk_uc _SYSTEM monetdb DELETE
NO\n"
"mTests_sql_odbc_tests odbctst pk_uc _SYSTEM monetdb INSERT
NO\n"
@@ -493,6 +524,7 @@ main(int argc, char **argv)
(SQLCHAR*)"%1", SQL_NTS);
compareResult(stmt, ret, "SQLColumnPrivileges (odbctst, pk_uc, %1)",
"Resultset with 8 columns\n"
+ "Resultset with 0 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME
GRANTOR GRANTEE PRIVILEGE IS_GRANTABLE\n");
// tmp.tmp_pk_uc
@@ -500,6 +532,7 @@ main(int argc, char **argv)
(SQLCHAR*)"tmp", SQL_NTS, (SQLCHAR*)"tmp_pk_uc",
SQL_NTS);
compareResult(stmt, ret, "SQLPrimaryKeys (tmp, tmp_pk_uc)",
"Resultset with 6 columns\n"
+ "Resultset with 1 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME
KEY_SEQ PK_NAME\n"
"mTests_sql_odbc_tests tmp tmp_pk_uc id1 1
tmp_pk_uc_id1_pkey\n");
@@ -508,6 +541,7 @@ main(int argc, char **argv)
SQL_SCOPE_SESSION, SQL_NO_NULLS);
compareResult(stmt, ret, "SQLSpecialColumns (tmp, tmp_pk_uc)",
"Resultset with 8 columns\n"
+ "Resultset with 1 rows\n"
"SCOPE COLUMN_NAME DATA_TYPE TYPE_NAME
COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS PSEUDO_COLUMN\n"
"1 id1 4 INTEGER 32 11 0 1\n");
@@ -516,6 +550,7 @@ main(int argc, char **argv)
SQL_INDEX_UNIQUE, SQL_ENSURE);
compareResult(stmt, ret, "SQLStatistics (tmp, tmp_pk_uc,
SQL_INDEX_UNIQUE, SQL_ENSURE)",
"Resultset with 13 columns\n"
+ "Resultset with 2 rows\n"
"TABLE_CAT TABLE_SCHEM TABLE_NAME NON_UNIQUE
INDEX_QUALIFIER INDEX_NAME TYPE ORDINAL_POSITION COLUMN_NAME
ASC_OR_DESC CARDINALITY PAGES FILTER_CONDITION\n"
"mTests_sql_odbc_tests tmp tmp_pk_uc 0 NULL
tmp_pk_uc_id1_pkey 2 1 id1 NULL NULL NULL NULL\n"
"mTests_sql_odbc_tests tmp tmp_pk_uc 0 NULL
tmp_pk_uc_name1_unique 2 1 name1 NULL NULL NULL
NULL\n");
@@ -525,6 +560,7 @@ main(int argc, char **argv)
SQL_INDEX_ALL, SQL_QUICK);
compareResult(stmt, ret, "SQLStatistics (tmp, tmp_pk_uc, SQL_INDEX_ALL,
SQL_QUICK)",
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]