[FB-Tracker] Created: (CORE-2738) The engine should stop the creation of invalid or useless views

View: New views
1 Messages — Rating Filter:   Alert me  

[FB-Tracker] Created: (CORE-2738) The engine should stop the creation of invalid or useless views

by JIRA tracker@firebirdsql.org :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

The engine should stop the creation of invalid or useless views
---------------------------------------------------------------

                 Key: CORE-2738
                 URL: http://tracker.firebirdsql.org/browse/CORE-2738
             Project: Firebird Core
          Issue Type: Bug
          Components: Engine
    Affects Versions: 3.0 Initial, 2.1.3, 2.5 Beta 2,  2.5 Beta 1, 2.1.2, 2.1.1, 2.5 Alpha 1, 2.1.0
            Reporter: Claudio Valderrama C.


I know nobody probably attempts this, but the engine should do more checks.

F:\fb3dev\fbbuild\firebird30\temp\Win32\Debug\firebird\bin>isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> create database 'poorview.fdb';
SQL> create table t(a int);
SQL> create view vj1 as select a from t;
SQL> create view vj2 as select v.a from vj1 v, vj1;
SQL> create view vj3 as select v.a from vj2 v, vj2;
SQL> create view vj4 as select v.a from vj3 v, vj3;
SQL> create view vj5 as select v.a from vj4 v, vj4;
SQL> create view vj6 as select v.a from vj5 v, vj5;
SQL> create view vj7 as select v.a from vj6 v, vj6;
SQL> create view vj8 as select v.a from vj7 v, vj7;
SQL> create view vj9 as select v.a from vj8 v, vj8;
SQL> create view vj10 as select v.a from vj9 v, vj9;
SQL> create view vj11 as select v.a from vj10 v, vj10;
SQL> create view vj12 as select v.a from vj11 v, vj11;
SQL> create view vj13 as select v.a from vj12 v, vj12;
SQL> create view vj14 as select v.a from vj13 v, vj13;
SQL> create view vj15 as select v.a from vj14 v, vj14;
SQL> create view vj16 as select v.a from vj15 v, vj15;
SQL> create view vj17 as select v.a from vj16 v, vj16;
SQL> create view vj18 as select v.a from vj17 v, vj17;
SQL> create view vj19 as select v.a from vj18 v, vj18;
SQL> create view vj20 as select v.a from vj19 v, vj19;
SQL> create view vj21 as select v.a from vj20 v, vj20;
SQL> create view vj22 as select v.a from vj21 v, vj21;
SQL> create view vj23 as select v.a from vj22 v, vj22;
SQL> create view vj24 as select v.a from vj23 v, vj23;
SQL> create view vj25 as select v.a from vj24 v, vj24;
SQL> create view vj26 as select v.a from vj25 v, vj25;
SQL> create view vj27 as select v.a from vj26 v, vj26;
SQL> commit;
SQL> select rdb$relation_name, rdb$dbkey_length
from rdb$relations where rdb$relation_name starting 'VJ';

RDB$RELATION_NAME    RDB$DBKEY_LENGTH
=====================================
VJ1                              8
VJ2                             16
VJ3                             32
VJ4                             64
VJ5                            128
VJ6                            256
VJ7                            512
VJ8                           1024
VJ9                           2048
VJ10                          4096
VJ11                          8192
VJ12                         16384
VJ13                        -32768
VJ14                             0
VJ15                             0
VJ16                             0
VJ17                             0
VJ18                             0
VJ19                             0
VJ20                             0

RDB$RELATION_NAME    RDB$DBKEY_LENGTH
=====================================
VJ21                             0
VJ22                             0
VJ23                             0
VJ24                             0
VJ25                             0
VJ26                             0
VJ27                             0

We can see that vj13 is already invalid from the POV of the db_key's length, but the engine allow subsequent views based on it. When the db_key becomes negative or zero due to overflow, it's time to stop.

SQL> select * from vj1;
SQL> select * from vj2;
SQL> select * from vj3;
SQL> select * from vj4;
SQL> select * from vj5;
SQL> select * from vj6;
SQL> select * from vj7;
SQL> select * from vj8;
Statement failed, SQLSTATE = 54001
Too many Contexts of Relation/Procedure/Views. Maximum allowed is 255

But we can see, too that vj8 is already invalid due to an internal limit: contexts. What's the value of allowing the creation of a view that cannot be queried?
Even the most trivial query fails:

SQL> select 1 from vj8;
Statement failed, SQLSTATE = 54001
Too many Contexts of Relation/Procedure/Views. Maximum allowed is 255

Hence, whatever happens first, invalid db_key's length or maximum number of contexts, the engine should not allow further definitions.


--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel