Additional
dbCAP
AnyDAC
ThinDAC
NCOCI8
Topic: множественные инсерты и MySQL
множественные инсерты и MySQL
Posted: 2007/05/28 04:16
 
Приветсвую.

Есть несколько жалоб на сабж.

1. REPLACE не считается INSERT-ом, соответсвенно, множественные операции не генерируются. Т.е. в

 procedure TADPhysMySQLCommand.InternalExecute(ATimesAOffsetInteger; ...   if (GetCommandKind skInsert) and (FSQLValuesPos 0) and (ATimes AOffset 1then

GetCommandKind = skOther.

2. Если VALUE не окружена пробелами параметры не находятся. Т.е. в

 procedure TADPhysMySQLCommand.InternalExecute(ATimesAOffsetInteger; ...   if (GetCommandKind skInsert) and (FSQLValuesPos 0) and (ATimes AOffset 1then

значение FSQLValuesPos = 0.

3. Текст после значений повторяется в каждой строке. Т.е. при исходной конструкции

 INSERT ... VALUES (:F1,:F2ON DUPLICATE..

фрагмент ON DUPLICATE.. дублируется в кажной строке со значениями. Хотелось бы, чтобы размножалось только содержимое скобок.

Использую D7, AnyDAC 1.12.2, MySQL 5.0.27.

Если правки не сложные (по пунткту 1 и 3), нельзя ли прислать инструкцию по их внесению?

Спасибо. АК.
Re:множественные инсерты и MySQL
Posted: 2007/05/28 04:41
 
Привет

Спасибо за отчет. Я прикрепил исправленные файлы. Выберите из них нужное по словам SQLValuesPosEnd и 'REPLACE'.

Удачи,
Дмитрий
Re:множественные инсерты и MySQL
Posted: 2007/05/28 04:43
 
вот и файл.
File Attachment:
File name: Sources.rar
File size:35576 bytes
Re:множественные инсерты и MySQL
Posted: 2007/05/28 08:01
 
Спасибо за оперативность. Есть положительные сдвиги.

Теперь конструкция ON DUPLICATE... не дублируется, но остается после первого набора данных (а хотелось бы в конце). Т.е. Move-ом тут уже не обойдешься.

Есть еще одна забавнуха. В INSERT-е возможна конструкция "ON DUPLICATE KEY UPDATE fieldName = VALUES(fieldName)". При разборе SQLValuesPosEnd цепляется именно за эту последнюю скобку и вся конструкция , естественно, копируется.

PS. Хорошо бы, письма с уведомлениями приходили с указанием кодировки...
Re:множественные инсерты и MySQL
Posted: 2007/05/30 04:56
 
А как с этими вопросами?
Re:множественные инсерты и MySQL
Posted: 2007/05/30 05:33
 
1) Пришлите мне тривиальный тест - что и на какой команде у вас рушится.

2) Касательно "забавнухи"": в модуле daADPhysCmdPreprocessor замените

line 737:
if (FBraceLevel = 0) and (FSQLValuesPos <> 0) then
FSQLValuesPosEnd := iPos;

на

if (FBraceLevel = 0) and (FSQLValuesPos <> 0) and (FSQLValuesPosEnd = 0) then
FSQLValuesPosEnd := iPos;
Re:множественные инсерты и MySQL
Posted: 2007/05/30 06:45
 
1. Конструкция

 VALUES (:F0,:F1ON DUPLICATE... 


заменяется на

 VALUES (...) ON DUPLICATE... ,(...),(...) 


а должна бы на

 VALUES (...),(...),(...) ON DUPLICATE... 



2. Спасибо.

Назрел еще вопрос.

Можно ли использовать параметр внутри макроса? Например: Macros[0].AsString := '<> :F0', где :F0 - параметр.
Re:множественные инсерты и MySQL
Posted: 2007/05/30 07:02
 
> 1.
Ok. Посмотрю.

> Можно ли использовать параметр внутри макроса?
Вроде бы - да. Попробуйте.