diff options
author | Sunil Joshi <joshi_sunil@in.com> | 2012-12-01 02:46:02 +0100 |
---|---|---|
committer | Frédéric Buclin <LpSolit@gmail.com> | 2012-12-01 02:46:02 +0100 |
commit | 809b353e8bfb0e0f6deff421eb391a824812857d (patch) | |
tree | 63a5f528ba0a90329fdde77bab60c0f44e137cbb | |
parent | b4adb1ab4c7e3c34d64b92530602ca38144f249b (diff) | |
download | bugzilla-809b353e8bfb0e0f6deff421eb391a824812857d.tar.gz bugzilla-809b353e8bfb0e0f6deff421eb391a824812857d.tar.xz |
Bug 247560: Add tests for reserved SQL words in the DB schema
r/a=LpSolit
-rw-r--r-- | t/013dbschema.t | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/t/013dbschema.t b/t/013dbschema.t new file mode 100644 index 000000000..0733fac63 --- /dev/null +++ b/t/013dbschema.t @@ -0,0 +1,84 @@ +# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This Source Code Form is "Incompatible With Secondary Licenses", as
+# defined by the Mozilla Public License, v. 2.0.
+
+##################
+#Bugzilla Test 13#
+#####schema#######
+
+# Check the Bugzilla database schema to ensure no field names conflict
+# with SQL reserved words.
+
+use strict;
+use lib qw(. t lib);
+use Bugzilla;
+use Bugzilla::DB::Schema;
+
+
+# SQL reserved words
+use constant RESERVED_WORDS => qw(
+ ABSOLUTE ACTION ACTOR ADD AFTER ALL ALLOCATE ALTER ANY AND ARE ASC ASSERTION ASYNC AT
+ ATTRIBUTES BEFORE BEGIN BETWEEN BIT BIT_LENGTH BOOLEAN BOTH BREADTH CALL CASCADE
+ CASCADED CASE CAST CATALOG CHARACTER_LENGTH CHAR_LENGTH COLLATE
+ COLLATION COLUMN COMPLETION CONNECT CONNECTION CONSTRAINT CONSTRAINTS
+ CONVERT CORRESPONDING CREATE CROSS CURRENT_DATE CURRENT_PATH CURRENT_TIME
+ CURRENT_TIMESTAMP CURRENT_USER CYCLE DATA DATE DAY DEALLOCATE DECLARE DEFAULT DEFERRABLE
+ DEFERRED DELETE DEPTH DESC DESCRIBE DESCRIPTOR DESTROY DIAGNOSTICS DICTIONARY
+ DISCONNECT DISTINCT DO DOMAIN DROP EACH ELEMENT ELSE ELSEIF END END-EXEC EQUALS EXCEPT
+ EXCEPTION EXECUTE EXTERNAL EXTRACT FACTOR FALSE FIRST FOR FROM FULL GENERAL GET
+ GLOBAL GRANT GROUP HAVING HOLD HOUR IDENTITY IF IGNORE IMMEDIATE IN INITIALLY INNER INPUT
+ INSENSITIVE INSERT INSTEAD INTERSECT INTERVAL IS ISOLATION JOIN LAST LEADING LEAVE
+ LEFT LESS LEVEL LIMIT LIST LOCAL LOOP LOWER MATCH MINUTE MODIFY MONTH NAMES
+ NATIONAL NATURAL NCHAR NEW NEW_TABLE NEXT NO NONE NOT NULL NULLIF OBJECT
+ OCTET_LENGTH OFF OID OLD OLD_TABLE ONLY OPERATION OPERATOR OPERATORS OR ORDER OTHERS
+ OUTER OUTPUT OVERLAPS PAD PARAMETERS PARTIAL PATH PENDANT POSITION POSTFIX
+ PREFIX PREORDER PREPARE PRESERVE PRIOR PRIVATE PROTECTED READ RECURSIVE REF
+ REFERENCING RELATIVE REPLACE RESIGNAL RESTRICT RETURN RETURNS REVOKE RIGHT
+ ROLE ROUTINE ROW ROWS SAVEPOINT SCROLL SEARCH SECOND SELECT SENSITIVE SEQUENCE
+ SESSION SESSION_USER SIGNAL SIMILAR SIZE SPACE SQLEXCEPTION SQLSTATE
+ SQLWARNING START STATE STRUCTURE SUBSTRING SYMBOL SYSTEM_USER TABLE TEMPORARY
+ TERM TEST THEN THERE TIME TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINUTE TRAILING
+ TRANSACTION TRANSLATE TRANSLATION TRIGGER TRIM TRUE TUPLE UNDER
+ UNKNOWN UNION UNIQUE UPDATE UPPER USAGE USING VARCHAR VARIABLE VARYING VIRTUAL VISIBLE
+ WAIT WHEN WHERE WHILE WITH WITHOUT WRITE YEAR ZONE
+);
+
+# Few Exceptions are removed from the above list
+# i.e. VALUE, TYPE, ALIAS, COALESCE
+
+our $dbh;
+our $schema;
+our @tables;
+
+BEGIN {
+ $schema = Bugzilla::DB::Schema->new("Mysql");
+ @tables = $schema->get_table_list();
+}
+
+use Test::More tests => scalar(@tables);
+
+foreach my $table (@tables) {
+ my @reserved;
+
+ if (grep { uc($table) eq $_ } RESERVED_WORDS) {
+ push(@reserved, $table);
+ }
+
+ foreach my $column ($schema->get_table_columns($table)) {
+ if (grep { uc($column) eq $_ } RESERVED_WORDS) {
+ push(@reserved, $column);
+ }
+ }
+
+ if (scalar @reserved) {
+ ok(0, "Table $table use reserved words: " . join(", ", @reserved));
+ }
+ else {
+ ok(1, "Table $table does not use reserved words");
+ }
+}
+
+exit 0;
|