powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / select из вьюхи, которую только что alter'нули в другом аттаче
4 сообщений из 4, страница 1 из 1
select из вьюхи, которую только что alter'нули в другом аттаче
    #39147662
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
select из вьюхи, которую только что alter'нули в другом аттаче
    #39147665
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид
Код: plaintext
1.
2.
3.
4.
5.
6.
 isql-2. 
 connect '/3255:e25'; -- <<< здесь пропущен connect к этой базе, но надеюсь, что это и так понятно <<< 
SQL> select * from v;

           A            B
============ ============
           1            2
...
Рейтинг: 0 / 0
select из вьюхи, которую только что alter'нули в другом аттаче
    #39147695
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забей, все и так знают, что версионность и транзакционность метаданных поломана давно и
надёжно. Чинить её надо, но это тяжело, поэтому багов чаще всего обносят заборчиком из
костылей до лучших времён.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select из вьюхи, которую только что alter'нули в другом аттаче
    #39147723
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно как-то. Есть 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
4 сообщений из 4, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / select из вьюхи, которую только что alter'нули в другом аттаче
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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