|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
kdvДа, сервер идентификаторы без квотирования приводит к uppercase. А мог бы ещё и неприведённые сохранять. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 18:49 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
"Безобразно, зато единообразно" - армейский принцип. Область применения - гораздо шире. P.S. "Case insensitive, but case preserve" - тоже имеет право на жизнь, но зачем усложнять работу сервера? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 18:52 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
Basil A. SidorovP.S. "Case insensitive, but case preserve" - тоже имеет право на жизнь, но зачем усложнять работу сервера? Чтобы не обрамлять в двойные кавычки когда нужен case preserve. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 19:08 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
и ещё разЧтобы не обрамлять в двойные кавычки когда нужен case preserve.Это всё замечательно, но серверу-то зачем жизнь усложнять??? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 19:49 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
и ещё раз, эта тема обсуждалась достаточно давно. На текущий момент поздно метаться, потому что create table "test" приведет к появлению таблицы в Rdb$relations с именем test, и там нет никакой информации о том, что это имя должно быть "закавычено". Таким образом, если без добавления специфической информации в rdb$relations сделать case preserve, то автоматически получим, что закавычивать надо абсолютно все, или наоборот, потеряется case sensitive при квотировании. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 22:58 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
kdvДа, сервер идентификаторы без квотирования приводит к uppercase. Болит голова от прописных букв? Ну пусть тогда болит от двойных кавычек. Таки да! В конечном итоге, моё решение - моя ответственность. Действительно, тут не о чем спорить и перегонять из пустого в порожний. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 02:00 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
kdvНа текущий момент поздно метаться, потому что create table "test" приведет к появлению таблицы в Rdb$relations с именем test, и там нет никакой информации о том, что это имя должно быть "закавычено". Таким образом, если без добавления специфической информации в rdb$relations сделать case preserve, то автоматически получим, что закавычивать надо абсолютно все, или наоборот, потеряется case sensitive при квотировании. Case preserve, это когда после create table Test из системных таблиц можно достать и TEST и Test. TEST - для движка, Test - для тех кому нужен Test. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 08:54 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
и ещё раз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. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 08:57 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
и ещё раз, я понимаю, но как ты это обеспечишь одновременно case preserve и quoted case sensitive? разве что доп. флагом в rdb$relations, а его нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 09:00 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
kdvи ещё раз, я понимаю, но как ты это обеспечишь одновременно case preserve и quoted case sensitive? разве что доп. флагом в rdb$relations, а его нет. Перестал вас понимать. Напишите пример на sql. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 09:03 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
kdv, к верхнему регистру приводит fbclient или сам сервер? Если сервер, то настройка "сохранять регистр" могла бы указывать серверу при сохранении метаданных не приводить идентификаторы к верхнему регистру, а CASE средства, вычитывая эту настройку с сервера, не квотировали бы и не приводили к верхнему регистру идентификаторы при чтении/записи метаданных. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 09:22 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
rdb_dev, в самом сервере то это можно делать если хранить метаданные в UTF8 с нечувствительным к регистру коллейтом. А вот как после этого поведут себя существующие приложения большой вопрос. Обратную совместимость всё таки не следует нарушать. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 09:35 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
Симонов Денис, в таком случае, "case preserve" надо задавать создавать как параметр соединения, со значением по умолчанию, соответствующем false. Соответственно, если "case preserve" = true, при чтении метаданных CASE средство ничего не квотирует, если false - квотируются идентификаторы, содержащие нижний регистр. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 10:10 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
и ещё разПерестал вас понимать. Напишите пример на 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 одновременно. Причем, настройка должна быть не у сервера, и даже не у базы данных, а у таблицы - считать ее имя точным в соответствии с регистром, или наоборот, игнорировать регистр. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 10:15 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
Реализовать-то можно, но: 1. Тот ещё геморрой 2. Практически наверняка сломается то, что (хотя бы) читает системные таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 10:45 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
kdvДопустим, предлагается сделать case preserve. Ок, тогда сервер при сохранении объекта не будет приводить его имя к UPPER. Нужно чтобы одновременно и сохранял оригинальное и приводил к UPPER. Т.е. для пользователей текущее поведение остаётся тем же, но появляется возможность ещё и вытаскивать оригинальный Case из системных таблиц и sqlda. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 10:51 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
... но зашибись будет поведение: Код: sql 1. 2. 3.
Оно точно надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 10:57 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
Пардон - оно и сейчас такое же. P.S. Не, не хочу даже квотированных имён ... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 10:59 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
Basil A. SidorovРеализовать-то можно, но: 1. Тот ещё геморрой 2. Практически наверняка сломается то, что (хотя бы) читает системные таблицы. 1. Добавить поле RDB$ORIGINAL_NAME в системные таблицы. 2. Опишите что сломается. Я спрашиваю потому, что не вижу как может сломаться то, что мы не меняем. Такое ощущение, что мы говорим про совершенно разные вещи... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 10:59 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
и ещё раз1. Добавить поле RDB$ORIGINAL_NAME в системные таблицыЭто ломает "case preserve", т.к. возвращаться будет "object case", а совсем не то, что я ввёл: Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 11:03 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
я все это к тому, что без изменений в 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" - задано квотирование, такое имя точно есть, ошибки нет. короче, флаг нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 11:09 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
Basil A. SidorovP.S. Не, не хочу даже квотированных имён ... О том и речь. Хочется для create table Test иметь возможность вытащить из системных таблиц не только TEST, но и Test. Всё. И IBExpert потом сделает галку: "Выводить имена системных объектов в original case". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 11:10 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
и ещё раз, ИМХО, настройка соединения "CASE_PRESERVE" со значением по умолчанию FALSE, должна решить все проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 11:13 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
и ещё разХочется для create table Test иметь возможность вытащить из системных таблиц не только TEST, но и TestПеределайте свой ЗапросоНаписатель так, чтобы у него была возможность указать "приятный регистр" для "прописных идентификаторов". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 11:15 |
|
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
|
|||
---|---|---|---|
#18+
Hello, Basil A. Sidorov! You wrote on 9 июня 2016 г. 11:23:23: Basil A. Sidorov> Переделайте свой ЗапросоНаписатель так, чтобы /у него/ была возможность > указать "приятный регистр" для "прописных идентификаторов".не взлетит. тут программист нужен... (с) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 11:23 |
|
|
start [/forum/topic.php?fid=40&msg=39253374&tid=1562142]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 180ms |
0 / 0 |