Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / select из вьюхи, которую только что alter'нули в другом аттаче / 4 сообщений из 4, страница 1 из 1
14.01.2016, 18:50
    #39147662
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select из вьюхи, которую только что alter'нули в другом аттаче
hi all.

Народ, проверьте, плз, у себя на пустой базе вот это:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
 isql-1. 

C:\MIX\firebird\QA\fbt-repo\tmp>isql /3255:e25
Database: /3255:e25, User: SYSDBA
SQL> create table t(a integer, b integer, c integer);
SQL> commit;
SQL> insert into t values(1,2,3);
SQL> commit;
SQL> create view v(a, b) as
CON> select a, b from t;
SQL> commit;
SQL> select * from v;

           A            B
============ ============
           1            2

 isql-2. 

SQL> select * from v;

           A            B
============ ============
           1            2

SQL> commit;

 isql-1. 

SQL> alter view v(a, b, c) as
CON> select a, b, c from t;
SQL> commit;

 isql-2. 

SQL> select * from v;

ВОПРОС. Что у вас будет выведено в результате последнего селекта в isql-2 ?
...
Рейтинг: 0 / 0
14.01.2016, 18:53
    #39147665
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select из вьюхи, которую только что alter'нули в другом аттаче
Таблоид
Код: plaintext
1.
2.
3.
4.
5.
6.
 isql-2. 
 connect '/3255:e25'; -- <<< здесь пропущен connect к этой базе, но надеюсь, что это и так понятно <<< 
SQL> select * from v;

           A            B
============ ============
           1            2
...
Рейтинг: 0 / 0
14.01.2016, 19:30
    #39147695
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select из вьюхи, которую только что alter'нули в другом аттаче
Забей, все и так знают, что версионность и транзакционность метаданных поломана давно и
надёжно. Чинить её надо, но это тяжело, поэтому багов чаще всего обносят заборчиком из
костылей до лучших времён.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.01.2016, 20:08
    #39147723
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select из вьюхи, которую только что alter'нули в другом аттаче
Странно как-то. Есть CORE-3024 , и к нему был сбацан тест, который уже несколько дней почему-то проваливается.

И судя по итогам, которые показаны на этих страницах:
http://web.firebirdsql.org/download/prerelease/results/2.5.6.26963/bugs.core_3024.html
http://web.firebirdsql.org/download/prerelease/results/archive/3.0.0.32272/bugs.core_3024.html

-- транзакция коннекта-2 не видит обновленных метаданных.
Но и приведенный выше isql-сценарий, и вот этот питонский скрипт (а тесты прокручиваются питоном):
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
import fdb

print fdb.__version__

att1=fdb.connect(dsn='/3255:e25',user='SYSDBA',password='masterkey')
att2=fdb.connect(dsn='/3255:e25',user='SYSDBA',password='masterkey')

trn1=att1.trans()
cur1=trn1.cursor()

cur1.execute("create table t(a int, b int, c int)")   # att_12, tra_4
cur1.execute("create view v as select a,b from t")
trn1.commit()

cur1.execute("insert into t values(1,2,3)")           # att_12, tra_5
cur1.execute("select * from v")

for c in cur1.fetchall():
    print(c)

trn1.commit()

trn2=att2.trans()
cur2=trn2.cursor()
cur2.execute("select * from v")                       # att_13, tra_7
trn2.commit()

cur1.execute("alter view v as select a, b, c from t") # att-12, tra_8
trn1.commit()

cur2.execute("select * from v")                       # att_13, tra_9

for c in cur2.fetchall():
    print(c)

-- стопудово говорят, что "всё гут".

Я смог воспроизвести "слепоту" второго коннекта только извратным способом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
set term ^;
execute block as
begin
  execute statement 'drop view v';
  when any do begin end
end
^
set term ;^
commit;

recreate table t(a integer, b integer, c integer);
commit;
insert into t values(1,2,3);
commit;

recreate view v(a, b) as
select a, b from t;
commit;

set transaction read committed; --  no wait;

select current_connection as this_att, current_transaction as this_trn, v.* from v;

set term ^;
execute block returns(this_att int, this_trn int, a int, b int, c int) as
begin
  for 
      execute statement (' select current_connection, current_transaction, v.* from v ')
      on external 'localhost:'||rdb$get_context('SYSTEM', 'DB_NAME')
      as user 'SYSDBA' password 'masterke'
  into this_att, this_trn, a, b
  do suspend;

  execute statement 'alter view v as select a, b, c from t' with autonomous transaction;

  for 
      execute statement (' select current_connection, current_transaction, v.* from v ')
      on external 'localhost:'||rdb$get_context('SYSTEM', 'DB_NAME')
      as user 'SYSDBA' password 'masterke' 
      -- role 'r2'
      with autonomous transaction
  into this_att, this_trn, a, b
  do suspend;

end
^
set term ;^
Этот код покажет следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 THIS_ATT     THIS_TRN            A            B
========= ============ ============ ============
        2           14            1            2


 THIS_ATT     THIS_TRN            A            B            C
========= ============ ============ ============ ============
        3            16            1            2       <null> 
        3            18            1            2       <null> 

Но терзают смутные сомнения, отчего тест, прогоняемый питоном, тоже "вдруг" слепой. Причём, только в одном месте - "ТАМ", на тестопрогонной тачке. У себя я проверял на двух машинах, 32 и 64 разр., на всех трёх арх-рах. И везде всё работает.

Загадко какое-то...
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / select из вьюхи, которую только что alter'нули в другом аттаче / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]