Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / Informix & ODBC & квотируемые идентификаторы / 12 сообщений из 12, страница 1 из 1
09.04.2008, 17:17
    #35246161
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Informix & ODBC & квотируемые идентификаторы
Привет Всем

На рабочей станции я залогинен как Administrator. После создания демо БД при помощи
dbdemo_ids.cmd -log, я получил в словаре в качестве владельца - Administrator. При попытке
выполнить запрос select * from administrator.orders получаю - объект в БД не существует.
select * from "Administrator".orders выполняется.

Отсюда возникли вопросы:

1) Квотируемые идентификаторы поддерживаются ("Administrator"), но атрибут соединения
SQL_IDENTIFIER_QUOTE_CHAR возвращает одиночный пробел, что значит - источник данных
не поддерживает квотируемые идентификаторы. Кому верить ?

2) Атрибуты соединения SQL_QUOTED_IDENTIFIER_CASE, SQL_IDENTIFIER_CASE возвращают
SQL_IC_LOWER, что значит - идентификаторы (как квотируемые, так и простые) являются
регистронезависимыми и в словаре хранятся в нижнем регистре. Но "Administrator" в моем
случае - регистрозависимое. Кому верить ?

Удачи,
Дмитрий

--
AnyDAC - компоненты для доступа к Oracle, MySQL, MSSQL, Interbase,
Firebird, MSAccess, IBM DB2, Advantage DS, Sybase ASA, DbExpress, ODBC.
...
Рейтинг: 0 / 0
10.04.2008, 09:03
    #35247029
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Informix & ODBC & квотируемые идентификаторы
сразу скажу: ниже нет ни слова про odbc.

В информиксе бывают ansi и не ansi базы. Большинство девелоперов просто не подозревают, что в базе могут быть две таблицы с одинаковым именем, но с разными владельцами, и владельца в запросах не указывают.
http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.ddi.doc/ddi32.htm

Код: 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.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
create database test1 with log;
Database created.


create table aaa.t1(a integer)
Table created.


create table bbb.t1(a integer);
   310 : Table (bbb.t1) already exists in database.


select * from aaa.t1;
          a 
No rows found.


select * from t1;
          a 
No rows found.


select * from "t1";
   201 : A syntax error has occurred.


есть переменная DELIMIDENT=y, которая включает возможность заключать имена идентификаторов в кавычки.
export DELIMIDENT=y


create table aaa."T1"(a integer);
Table created.


select * from "t1";
          a 
No rows found.


---------------------------------------------------------------
create database test2 with log mode ansi;
Database created.


create table aaa.t1(a integer);
Table created.


create table bbb.t1(a integer);
Table created.


create table "Aaa".t1(a integer);
Table created.


create table "aAa"."T1"(a integer);
Table created.
...
Рейтинг: 0 / 0
10.04.2008, 10:39
    #35247325
Алексан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Informix & ODBC & квотируемые идентификаторы
Dmitry ArefievПривет Всем

На рабочей станции я залогинен как Administrator. После создания демо БД при помощи
dbdemo_ids.cmd -log, я получил в словаре в качестве владельца - Administrator. При попытке
выполнить запрос select * from administrator.orders получаю - объект в БД не существует.
select * from "Administrator".orders выполняется.

Отсюда возникли вопросы:

1) Квотируемые идентификаторы поддерживаются ("Administrator"), но атрибут соединения
SQL_IDENTIFIER_QUOTE_CHAR возвращает одиночный пробел, что значит - источник данных
не поддерживает квотируемые идентификаторы. Кому верить ?

2) Атрибуты соединения SQL_QUOTED_IDENTIFIER_CASE, SQL_IDENTIFIER_CASE возвращают
SQL_IC_LOWER, что значит - идентификаторы (как квотируемые, так и простые) являются
регистронезависимыми и в словаре хранятся в нижнем регистре. Но "Administrator" в моем
случае - регистрозависимое. Кому верить ?

1) Не уверен, что понимаю Ваш термин "Квотируемые идентификаторы". На всякий случай скажу, что у Informix'а нет понятия схемы, а имя владельца входит в полное имя объекта.

2). Я вижу, что запрос
echo select * from "informix".sysdatabases | dbaccess sysmaster - правильный,
echo select * from "informix".Sysdatabases | dbaccess sysmaster - правильный, а
echo select * from "INFORMIX".sysdatabases | dbaccess sysmaster - неправильный ( 206: The specified table (INFORMIX.sysdatabases) is not in the database.)

Также несомненно, что имена таблиц хранятся в нижнем регистре, а имена владельцев к нижнему регистру не приводятся.
...
Рейтинг: 0 / 0
10.04.2008, 11:18
    #35247470
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Informix & ODBC & квотируемые идентификаторы
Алексан
Также несомненно, что имена таблиц хранятся в нижнем регистре, а имена владельцев к нижнему регистру не приводятся.
дад
Код: 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.
echo "select owner, tabname from systables where lower(tabname) = 't1' "|dbaccess test2

Database selected.




owner    AAA
tabname  t1

owner    BBB
tabname  t1

owner    Aaa
tabname  t1

owner    aAa
tabname  T1

owner    aaa
tabname  T1

owner    aaa
tabname  t1

 6  row(s) retrieved.



Data committed.


Database closed.
...
Рейтинг: 0 / 0
10.04.2008, 11:41
    #35247579
Алексан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Informix & ODBC & квотируемые идентификаторы
Журавлев Денис Алексан
Также несомненно, что имена таблиц хранятся в нижнем регистре, а имена владельцев к нижнему регистру не приводятся.
дад
Код: 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.
echo "select owner, tabname from systables where lower(tabname) = 't1' "|dbaccess test2

Database selected.




owner    AAA
tabname  t1

owner    BBB
tabname  t1

owner    Aaa
tabname  t1

owner    aAa
tabname  T1

owner    aaa
tabname  T1

owner    aaa
tabname  t1

 6  row(s) retrieved.



Data committed.


Database closed.

Код: 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.
C:\IBM\IDS100TC6>echo create table t1 (c1 char) | dbaccess d2

Database selected.


Table created.



Database closed.


C:\IBM\IDS100TC6>echo create table T1 (c1 char) | dbaccess d2

Database selected.


   310 : Table (AS.t1) already exists in database.
Error in line  1 
Near character position  26 


Database closed.


C:\IBM\IDS100TC6>onstat -

IBM Informix Dynamic Server Version  10 . 00 .TC6     -- On-Line -- Up 6 days 18:31:09 -- 21568 Kbytes


C:\IBM\IDS100TC6>
...
Рейтинг: 0 / 0
10.04.2008, 12:04
    #35247694
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Informix & ODBC & квотируемые идентификаторы
да хоть 7-ка, один фиг, можно, и в этом моя глубокая печаль.

Код: 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.
informix@nag:~> echo "create table \"T2\"(a integer)"|dbaccess test2

Database selected.


Table created.



Data committed.


Database closed.

informix@nag:~> echo "create table \"t2\"(a integer)"|dbaccess test2

Database selected.


Table created.



Data committed.


Database closed.
...
Рейтинг: 0 / 0
10.04.2008, 12:22
    #35247787
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Informix & ODBC & квотируемые идентификаторы
в общем в информиксе можно окавычивать владельца объекта всегда, если владелелец не окавычен, он будет приведен в нижний регистр.
...
Рейтинг: 0 / 0
10.04.2008, 12:28
    #35247822
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Informix & ODBC & квотируемые идентификаторы
ansi бд
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
echo "create table ccc.t4(a integer)"|dbaccess test2
Table created.

informix@nag:~> echo "select * from t4"|dbaccess test2
   206 : The specified table (informix.t4) is not in the database.
   111 : ISAM error:  no record found.
Database closed.

тоже самое не ansi бд
Код: plaintext
1.
2.
3.
4.
5.
6.
informix@nag:~> echo "create table ccc.t4(a integer)"|dbaccess test1
Table created.

informix@nag:~> echo "select * from t4"|dbaccess test1
          a 
No rows found.
...
Рейтинг: 0 / 0
11.04.2008, 15:43
    #35250197
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Informix & ODBC & квотируемые идентификаторы
Журавлев Денисда хоть 7-ка, один фиг, можно, и в этом моя глубокая печаль.
Денис, в чем твоя "глубокая печаль" ? Может мы ее развеем ? :)
...
Рейтинг: 0 / 0
11.04.2008, 15:54
    #35250240
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Informix & ODBC & квотируемые идентификаторы
vasilis Журавлев Денисда хоть 7-ка, один фиг, можно, и в этом моя глубокая печаль.
Денис, в чем твоя "глубокая печаль" ? Может мы ее развеем ? :)Такие возможности в информиксе есть, значит надо сделать в esqleditor-е поддержку анси баз и DELIMIDENT, в общем еще пилить и пилить.
...
Рейтинг: 0 / 0
11.04.2008, 16:53
    #35250483
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Informix & ODBC & квотируемые идентификаторы
Журавлев Денисподдержку анси баз и DELIMIDENT, в общем еще пилить и пилить.
Послушал я вас - огромное спасибо за обсуждение. Понял, что ODBC в плане
метаданных источника данных не совершенно :)
...
Рейтинг: 0 / 0
11.04.2008, 16:56
    #35250496
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Informix & ODBC & квотируемые идентификаторы
Dmitry Arefiev Журавлев Денисподдержку анси баз и DELIMIDENT, в общем еще пилить и пилить.
Послушал я вас - огромное спасибо за обсуждение. Понял, что ODBC в плане
метаданных источника данных не совершенно :)Сложно утверждать.

Попробуй в setnet32 поставь DELIMIDENT в "y" и посмотри SQL_IDENTIFIER_QUOTE_CHAR
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Informix & ODBC & квотируемые идентификаторы / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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