powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
25 сообщений из 112, страница 4 из 5
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253118
и ещё раз
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvДа, сервер идентификаторы без квотирования приводит к uppercase.
А мог бы ещё и неприведённые сохранять.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253119
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Безобразно, зато единообразно" - армейский принцип.
Область применения - гораздо шире.

P.S. "Case insensitive, but case preserve" - тоже имеет право на жизнь, но зачем усложнять работу сервера?
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253126
и ещё раз
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovP.S. "Case insensitive, but case preserve" - тоже имеет право на жизнь, но зачем усложнять работу сервера?
Чтобы не обрамлять в двойные кавычки когда нужен case preserve.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253143
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и ещё разЧтобы не обрамлять в двойные кавычки когда нужен case preserve.Это всё замечательно, но серверу-то зачем жизнь усложнять???
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253185
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и ещё раз,

эта тема обсуждалась достаточно давно. На текущий момент поздно метаться, потому что create table "test" приведет к появлению таблицы в Rdb$relations с именем test, и там нет никакой информации о том, что это имя должно быть "закавычено".
Таким образом, если без добавления специфической информации в rdb$relations сделать case preserve, то автоматически получим, что закавычивать надо абсолютно все, или наоборот, потеряется case sensitive при квотировании.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253223
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvДа, сервер идентификаторы без квотирования приводит к uppercase. Болит голова от прописных букв? Ну пусть тогда болит от двойных кавычек.
Таки да! В конечном итоге, моё решение - моя ответственность. Действительно, тут не о чем спорить и перегонять из пустого в порожний.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253280
и ещё раз
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvНа текущий момент поздно метаться, потому что create table "test" приведет к появлению таблицы в Rdb$relations с именем test, и там нет никакой информации о том, что это имя должно быть "закавычено".
Таким образом, если без добавления специфической информации в rdb$relations сделать case preserve, то автоматически получим, что закавычивать надо абсолютно все, или наоборот, потеряется case sensitive при квотировании.
Case preserve, это когда после create table Test из системных таблиц можно достать и TEST и Test. TEST - для движка, Test - для тех кому нужен Test.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253283
и ещё раз
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и ещё разkdvНа текущий момент поздно метаться, потому что create table "test" приведет к появлению таблицы в Rdb$relations с именем test, и там нет никакой информации о том, что это имя должно быть "закавычено".
Таким образом, если без добавления специфической информации в rdb$relations сделать case preserve, то автоматически получим, что закавычивать надо абсолютно все, или наоборот, потеряется case sensitive при квотировании.
Case preserve, это когда после create table Test из системных таблиц можно достать и TEST и Test. TEST - для движка, Test - для тех кому нужен Test.
TEST - для движка и тех кому нужен TEST, Test - для тех кому нужен Test.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253285
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и ещё раз,

я понимаю, но как ты это обеспечишь одновременно case preserve и quoted case sensitive? разве что доп. флагом в rdb$relations, а его нет.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253288
и ещё раз
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvи ещё раз,

я понимаю, но как ты это обеспечишь одновременно case preserve и quoted case sensitive? разве что доп. флагом в rdb$relations, а его нет.
Перестал вас понимать. Напишите пример на sql.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253293
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, к верхнему регистру приводит fbclient или сам сервер? Если сервер, то настройка "сохранять регистр" могла бы указывать серверу при сохранении метаданных не приводить идентификаторы к верхнему регистру, а CASE средства, вычитывая эту настройку с сервера, не квотировали бы и не приводили к верхнему регистру идентификаторы при чтении/записи метаданных.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253303
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

в самом сервере то это можно делать если хранить метаданные в UTF8 с нечувствительным к регистру коллейтом. А вот как после этого поведут себя существующие приложения большой вопрос. Обратную совместимость всё таки не следует нарушать.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253326
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, в таком случае, "case preserve" надо задавать создавать как параметр соединения, со значением по умолчанию, соответствующем false. Соответственно, если "case preserve" = true, при чтении метаданных CASE средство ничего не квотирует, если false - квотируются идентификаторы, содержащие нижний регистр.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253329
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и ещё разПерестал вас понимать. Напишите пример на sql.
господи. при чем тут sql. Попробую на пальцах.

create table test - в этом случае сервер делает upper('test') и заносит TEST в rdb$relations
create table "Test" - в этом случае сервер не делает upper, и заносит Test в rdb$relations.

Сейчас сервер отличает TEST от Test сравнением на равенство с upper(rdb$relation_name). Если они равны - ок. Если не равны, то сравнивается точное значение (квотированное), и если строки не совпадают (например 'test' и 'Test') - будет ошибка "нет такого идентификатора".
Таким образом не-квотированные идентификаторы у нас case insensitive, а квотированные - sensitive.
Еще раз повторяю, что в rdb$relations у таблицы нет никаких признаков "квотированности". Именно поэтому create table "TEST" эквивалентно create table Test.

Допустим, предлагается сделать case preserve. Ок, тогда сервер при сохранении объекта не будет приводить его имя к UPPER. Получается, что мы можем написать select * from Test, но по rdb$relations сервер не сможет понять, к какой именно таблице мы обращаемся - TEST или test. Определить это можно только используя квотирование, но это сразу превращает все в case sensitivity.
Опять непонятно? Представьте себе два множества - одно регистронезависимое, где все элементы идентичны, и другое, где все элементы считаются разными (в зависимости от регистра). Как их склеить?
rdb_devк верхнему регистру приводит fbclient или сам сервер? Если сервер, то настройка "сохранять регистр"
боже ж мой, какой клиент? клиенту вообще пофиг, что вы там пишете и передаете на сервер.
Я как раз говорю, что без "настройки" невозможно реализовать case preserve и case sensitivity одновременно. Причем, настройка должна быть не у сервера, и даже не у базы данных, а у таблицы - считать ее имя точным в соответствии с регистром, или наоборот, игнорировать регистр.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253357
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализовать-то можно, но:
1. Тот ещё геморрой
2. Практически наверняка сломается то, что (хотя бы) читает системные таблицы.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253365
и ещё раз
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvДопустим, предлагается сделать case preserve. Ок, тогда сервер при сохранении объекта не будет приводить его имя к UPPER.

Нужно чтобы одновременно и сохранял оригинальное и приводил к UPPER.
Т.е. для пользователей текущее поведение остаётся тем же, но появляется возможность ещё и вытаскивать оригинальный Case из системных таблиц и sqlda.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253372
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... но зашибись будет поведение:
Код: sql
1.
2.
3.
create table test   -- нормуль
create table Test   -- облом
create table "Test" -- нормуль

Оно точно надо?
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253373
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон - оно и сейчас такое же.

P.S. Не, не хочу даже квотированных имён ...
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253374
и ещё раз
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovРеализовать-то можно, но:
1. Тот ещё геморрой
2. Практически наверняка сломается то, что (хотя бы) читает системные таблицы.
1. Добавить поле RDB$ORIGINAL_NAME в системные таблицы.
2. Опишите что сломается. Я спрашиваю потому, что не вижу как может сломаться то, что мы не меняем.

Такое ощущение, что мы говорим про совершенно разные вещи...
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253378
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и ещё раз1. Добавить поле RDB$ORIGINAL_NAME в системные таблицыЭто ломает "case preserve", т.к. возвращаться будет "object case", а совсем не то, что я ввёл:
Код: sql
1.
2.
3.
select Поле from Таблица
-- хочу Поле
-- а не поле
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253384
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я все это к тому, что без изменений в rdb$relations, только кодом сервера реализовать и то и это не получится.

и ещё разНужно чтобы одновременно и сохранял оригинальное и приводил к UPPER.
и? откуда все равно знать, что это не квотированный идентификатор?
name original
TABLE Table
Table Table

дальше-то как их отличать? Вместо этого можно было бы сделать флаг - квотированное имя, или нет.
Create table "table" - квотированное, может быть несколько таких имен в разных регистрах.
Create table Table - не квотированное, сохраняем Table, дальше без квотирования регистр игнорируем. И такое имя может быть только одно.
select from Table - выбираем из не-квотированного, в любом регистре
select from "Table" - задано квотирование, но такого квотированного имени нет, ошибка
select from "table" - задано квотирование, такое имя точно есть, ошибки нет.

короче, флаг нужен.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253385
и ещё раз
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovP.S. Не, не хочу даже квотированных имён ...
О том и речь.
Хочется для create table Test иметь возможность вытащить из системных таблиц не только TEST, но и Test.
Всё.
И IBExpert потом сделает галку: "Выводить имена системных объектов в original case".
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253389
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и ещё раз, ИМХО, настройка соединения "CASE_PRESERVE" со значением по умолчанию FALSE, должна решить все проблемы.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253392
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и ещё разХочется для create table Test иметь возможность вытащить из системных таблиц не только TEST, но и TestПеределайте свой ЗапросоНаписатель так, чтобы у него была возможность указать "приятный регистр" для "прописных идентификаторов".
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39253396
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Basil A. Sidorov!
You wrote on 9 июня 2016 г. 11:23:23:

Basil A. Sidorov> Переделайте свой ЗапросоНаписатель так, чтобы /у него/ была возможность
> указать "приятный регистр" для "прописных идентификаторов".не взлетит.
тут программист нужен... (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 112, страница 4 из 5
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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