Changeset: 12e076445cd6 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/12e076445cd6
Modified Files:
src/main/java/org/monetdb/util/MDBvalidator.java
Branch: default
Log Message:
Extended Not Null violation check also with empty string checks for some of the
syte tables varchar columns.
diffs (60 lines):
diff --git a/src/main/java/org/monetdb/util/MDBvalidator.java
b/src/main/java/org/monetdb/util/MDBvalidator.java
--- a/src/main/java/org/monetdb/util/MDBvalidator.java
+++ b/src/main/java/org/monetdb/util/MDBvalidator.java
@@ -25,14 +25,14 @@ import java.util.Set;
* a) validate system tables data integrity in system schemas: sys and tmp
* this includes violations of:
* primary key uniqueness
- * primary key column(s) not null
+ * primary key column(s) not null and when varchar not empty string
* unique constraint uniqueness
* foreign key referential integrity
- * column not null
+ * column not null and some varchar columns not empty string
* column maximum length for char/varchar/clob/blob/json/url
columns which have max length > 0
* b) validate user schema tables & columns data integrity based on
available meta data from system tables & system views
* primary key uniqueness
- * TODO primary key column(s) not null
+ * TODO: primary key column(s) not null
* unique constraint uniqueness
* foreign key referential integrity
* column not null
@@ -42,7 +42,7 @@ import java.util.Set;
* col char/varchar/clob/blob/json/url minimum length (some
columns may not be empty, so length >= 1)
* col with sequence (serial/bigserial/autoincrement) in range
(0/1/min_value .. max_value)
* col value is valid in domain
(date/time/timestamp/json/inet/url/uuid/...)
- * col in list checks (some columns may have only certain values
which are not stored in a table or view (eg as fk))
+ * col in list-of-values checks (some columns may have only
certain values which are not stored in a table or view (eg as fk))
SELECT * FROM sys.table_partitions WHERE "type" NOT IN
(5,6,9,10); -- 5=By Column Range (1+4), 6=By Expression Range (2+4), 9=By
Column Value (1+8), 10=By Expression Value (2+8), see sql_catalog.h #define
PARTITION_*. Note table_partitions is introduced in Apr2019 "33"
* col conditional checks (column is not null when other column is
(not) null)
-- i.e.: either column_id or expression in sys.table_partitions
must be populated
@@ -536,13 +536,28 @@ public final class MDBvalidator {
if (multicolumn) {
String[] cols = col.split(", ");
for (int c = 0; c < cols.length; c++) {
+ final String colx = cols[c];
if (c > 0) {
isNullCond.append(" OR
");
}
-
isNullCond.append(cols[c]).append(" IS NULL");
+
isNullCond.append(colx).append(" IS NULL");
+
+ /* for some sys/tmp columns
also check for empty strings */
+ if (colx.endsWith("name") ||
colx.endsWith("keyword")
+ || "schema".equals(colx) ||
"table".equals(colx) || "column".equals(colx) || "func".equals(colx) ||
"mod".equals(colx) || "statement".equals(colx)
+ || ("type".equals(colx) &&
("_columns".equals(tbl) || "args".equals(tbl) || "storage()".equals(tbl) ||
"storagemodelinput".equals(tbl)))) {
+ isNullCond.append(" OR
").append(colx).append(" = ''");
+ }
}
} else {
isNullCond.append(col).append(" IS
NULL");
+
+ /* for some sys/tmp columns also check
for empty strings */
+ if (col.endsWith("name") ||
col.endsWith("keyword")
+ || "schema".equals(col) ||
"table".equals(col) || "column".equals(col) || "func".equals(col) ||
"mod".equals(col) || "statement".equals(col)
+ || ("type".equals(col) &&
("_columns".equals(tbl) || "args".equals(tbl) || "storage()".equals(tbl) ||
"storagemodelinput".equals(tbl)))) {
+ isNullCond.append(" OR
").append(col).append(" = ''");
+ }
}
// reuse the StringBuilder by cleaning it
partial
sb.setLength(qry_len);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]