|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
Возможно, баян. Запрос: Код: sql 1.
Если указать параметр длиной более 31 одного символа, FB выдает исключение: Код: plaintext 1. 2. 3. 4.
Разработчики знают про данный баг? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2015, 05:34 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
CyberMax, не то что это баг. Для параметра создается буфер. В соответствии с типом данных параметра. В данном случае его размер равен длине поля, с которым параметр сравнивается. 31 символ. Ели нужно, к примеру, 33 символа - задавай длину параметра явно: Код: sql 1.
А если тип данных параметра взять неоткуда, как вот тут: Код: sql 1.
- по получишь "Data type unknown". Вот такая логика. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2015, 07:13 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
ZeroMQ, А если поменялась длина поля? Придется во всех местах переделывать такие приведения. Причем неизвестно, что там по факту будет. Если в STR будет 100 символов? Считаю, что баг, так как программист не должен учитывать фактическую длину строки при указании значения параметра. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2015, 09:37 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
CyberMaxРазработчики знают про данный баг? да. Собственно не совсем понятно а какой размер под параметр STR выделять в данном случае. Все 32765 байт? А не жирно ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2015, 09:43 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
Симонов Денис, А что мешает задавать размер только при фактической подстановке? Ведь в случае, если поле длиной 25000, из которых по факту используется 5 символов, перерасход памяти получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2015, 09:55 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
CyberMax, потому что память под параметры выделяется в момент prepare. Когда я решил разобраться в UDR и посмотрел каким образом формируются входные и выходные сообщения для ХП, я понял откуда такой геморрой. Может быть когда-нибудь это и поменяют, но уж точно не в 2.5 и 3.0. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2015, 10:05 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
CyberMax, даже в UDR лезть не надо. Просто посмотри примеры работы с новым API. Оно и в старом так было, просто это не видно так явно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2015, 10:08 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
Симонов Денис, А, понятно, там глобальная проблема. Спасибо за ответы. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2015, 10:33 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
CyberMaxСчитаю, что баг, так как программист не должен учитывать фактическую длину строки при указании значения параметра. Программист должен понимать, что указывать в параметре для сравнения строку длиннее поля, совершенно бессмысленно, поскольку ни одно значение поля в принципе не может быть ей равно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2015, 12:46 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovПрограммист должен понимать, что указывать в параметре для сравнения строку длиннее поля, совершенно бессмысленно, поскольку ни одно значение поля в принципе не может быть ей равно. с точки зрения языка SQL это не запрещено. К тому же можно писать и другие запросы в которых это бы имело смысл. Что-то типа Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2015, 12:54 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
CyberMaxСчитаю, что баг, так как программист не должен учитывать фактическую длину строки при указании значения параметра. Полагаю, если, к примеру, оба поля символьные и тип параметра явно задан через cast, то серверу не стоит пытаться приводить параметр к точному типу поля, а сравнивать строки как есть. Не вижу в этом большой беды. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2015, 13:27 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
Учитывая, что эта тема периодически всплывает, неплохо бы на сию "проблему" указать в документации. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2015, 18:02 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovПрограммист должен понимать, что указывать в параметре для сравнения строку длиннее поля, совершенно бессмысленно, поскольку ни одно значение поля в принципе не может быть ей равно. Представь ситуацию - пользователь вводит текст для поиска записи по условию. Этот текст указывается в значении параметра для выборки. И тут запрос обламывается, потому что пользователь ввел 11 символов, а поле - 10. Это нормально? Я уже писал, что длина поля может измениться в любой момент. Сегодня 10 символов, завтра кто-то из разработчиков решил, что этого мало и сделал 15 символов. И теперь надо менять весь код, работающий с этим полем? Длина поля - это особенности реализации. И программист не должен заморачиваться, сколько там по факту длина строки в поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2015, 01:35 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
DBConstructor[Полагаю, если, к примеру, оба поля символьные и тип параметра явно задан через cast, то серверу не стоит пытаться приводить параметр к точному типу поля, а сравнивать строки как есть. Не вижу в этом большой беды. Ты читал тему? Речь идет о параметре без всяких CAST. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2015, 01:38 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
CyberMax, а какая разница используется ли явное преобразование или неявное? Суть не меняется - "не стоит пытаться приводить параметр к точному типу поля, а сравнивать строки как есть. Не вижу в этом большой беды." ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2015, 09:21 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
CyberMax, у меня вдруг появилось недопонимание в отношении твоего начального поста. Каким образом на клиенте в параметр CHAR(31) по полю RDB$SECURITY_CLASS подготовленного запроса ты умудряешься класть VARCHAR(33)? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2015, 10:14 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
DBConstructorКаким образом на клиенте в параметр CHAR(31) по полю RDB$SECURITY_CLASS подготовленного запроса ты умудряешься класть VARCHAR(33)? Проверял через IBExpert. Запускаешь запрос и у тебя IBE спрашивает значение параметра. Пишешь строку более 31 символа и получаешь исключение от FB. Как это делается - хз. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2015, 10:36 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
CyberMaxЯ уже писал, что длина поля может измениться в любой момент. Сегодня 10 символов, завтра кто-то из разработчиков решил, что этого мало и сделал 15 символов. И теперь надо менять весь код, работающий с этим полем? Ну, если руки кривые, то да. Если нет, то код типа такого менять никогда не нужно: Код: pascal 1. 2.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2015, 13:16 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovНу, если руки кривые, то да. Если нет, то код типа такого менять никогда не нужно: Код: pascal 1. 2.
Сдается мне, IBExpert валит ошибку именно по этой же причине - override свойств параметра подготовленного запроса под размещение значения большего размера, чем поле, с которым производится сравнение и по которому были рассчитаны свойства параметра. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2015, 13:30 |
|
Сравнение строкового поля с параметром
|
|||
---|---|---|---|
#18+
Странно, что сей "баг" не упоминают в битвах этой ветки. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2015, 17:52 |
|
|
start [/forum/topic.php?fid=40&msg=39139827&tid=1562420]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 168ms |
0 / 0 |