[20:47:35] <landgraf> О, сабж жабу починил
[20:50:40] <subj_rs> починил. у нас тут пожар был этажем выше, меня трясет до сих пор
[20:50:56] <subj_rs> домой попасть не мог, замки срезали
[20:52:00] <subj_rs> слава йайцам не надо мной, а на против сверху - соседей залило полностью, выше все выгорело нахуй, я зашел - до сих пор не верю что не затронуло
[20:52:41] <subj_rs> отдохнул блин пару дней - а тут такое
[21:04:26] <yeo> vgodunko: в оракле можно вернуть сгенерированное значение через sql специального вида returning into ...
[21:05:04] <subj_rs> landgraf: http://news.mail.ru/inregions/moscow/90/incident/12966509/
[21:05:14] <vgodunko> В PostgreSQL аналогично
[21:05:15] <yeo> insert into aaa values (:a, :b) returning my_primary_key into :c
[21:05:20] <vgodunko> Вопрос как сделать для SQLite
[21:05:53] <vgodunko> Хочется просто доработать парсер SQL, расширив необходимой функциональностью, но очень страшно так делать :-(
[21:09:22] <yeo> subj_rs: жесть
[21:09:44] <subj_rs> yeo: сам в ахуе
[21:13:45] <yeo> vgodunko: ты хочешь чтобы драйвер mysql парсил SQL-и вида " insert into aaa values (:a, :b) returning my_primary_key into :c" и делал два запроса (insert+select last_insert_rowid())?
[21:13:55] <yeo> как-то это через >.<
[21:17:35] <yeo> как Ада парсит выражение -x*2? Как -(x*2) или (-x)*2?
[21:20:29] <yeo> я всегда думал что (-x)*2, а в ARM пишут что -(x*2) :(
[21:42:19] <landgraf> пофиксил ошибку с "лишними" полями
[22:01:44] <vgodunko> Два запроса делать не нужно
[22:03:23] <yeo> тогда твоя идея от меня ускользает :(
[22:04:42] <vgodunko> "дорабатываем" синтакс SQLite до INSERT ... RETURNING <column>
[22:04:59] <yeo> и?
[22:05:21] <vgodunko> И получаем возможность сделать Value для INSERT
[22:05:39] <vgodunko> Возвращаемое значение и будет last_insert_rowid если...
[22:05:52] <vgodunko> <column> это autoincrement primary key'\
[22:06:02] <vgodunko> http://www.sqlite.org/c3ref/table_column_metadata.html
[22:06:35] <yeo> чтобы узнать last_insert_rowid драйверу нужно сделать запрос select last_insert_rowid()
[22:07:19] <vgodunko> Нужно вызвать sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
[22:07:38] <vgodunko> Прямо на "драйвере" базы данных.
[22:07:42] <yeo> ну это тоже самое ;)
[22:07:49] <vgodunko> Не совсем
[22:08:03] <vgodunko> Здесь не нужно морочиться с SQL запросами.
[22:11:59] <landgraf> vgodunko, после исправления ошибки - все заработало как надо. а так у меня зависимости накапливались как снежный ком :-D
[22:15:31] <yeo> vgodunko, не проще ли сделать аналог sqlite3_last_insert_rowid доступным в sqlite драйвере
[22:25:53] <vgodunko> А как это эмулировать на других базах?
[22:26:11] <vgodunko> Добавишь раз в API - будешь отвечать на тучи вопросов :-(
[22:28:59] <yeo> никак не эмулировать. пусть кому надо это для sqlite зовут функцию прямо из драйвера
[22:29:26] <vgodunko> Есть простая альтернатива - застолбить out параметр и описать его в документации на драйвер SQLite
[22:30:19] <vgodunko> Мне почему-то кажется, что out параметров в SQLite нет, поэтому никаких даже потенциальных проблем быть не может
[22:30:45] <vgodunko> Но INSERT ... RETURNING ... выглядит круче!
[22:30:47] <vgodunko> ;-)
[22:31:23] <yeo> особенно когда люди заглянут в руководство по синтаксисы sqlite :(
[22:32:32] <vgodunko> Ну... есть конечно такое
[22:32:59] <vgodunko> Хотя сейчас у нас только один внешний пользователь - landgraf - а его мы научим ;-)
[22:41:02] <landgraf> этот пользователь нагенерил себе sha256 и доволен
[22:41:29] <vgodunko> Наша задача - наставить его на путь истинный, а не случайный
[22:42:43] <landgraf> а его задача - отгородиться от всяких непонятных методов, который зависят от базы )
[22:43:21] <landgraf> (не, он, конечно, сделает autoinrement, если не лень будет)
[22:43:47] <landgraf> а нет, он сделает это гораздо раньше :(
[22:45:40] <vgodunko> С чего бы это?
[22:46:12] <landgraf> надо же учитывать еще и версию зависимости, а мой код этого не учитывает
[22:46:35] <landgraf> прочем костыль уже готов...
[22:53:37] <landgraf> vgodunko, valgrind говорит, что после DB.Close  64 bytes in 1 blocks are possibly lost in loss record 179 of 296
[22:54:02] <vgodunko> Нужны детали
[23:00:37] <landgraf> vgodunko, а нет, это  DB.Handler := new SQL_Database'(SQL.Databases.Create (DB_Driver, DB_Options)); потерялся
[23:01:02] <landgraf> vgodunko, а как его уничтожить? ссылочного типа то я не создавал :(
[23:02:56] <vgodunko> А он что, анонимный?
[23:03:16] <vgodunko> Тогда сделать именованный и настроить Ada.Unchecked_Deallocation
[23:03:34] <landgraf> уже )
[23:35:52] <landgraf> A /= 0 and B /= 1 -> если А /= 0 вернет False - второе условие все равно проверяется?
[23:37:00] <landgraf> вернее у меня вот так "Ptr /= Null and Ptr.Mem /= Null"
[23:37:11] <landgraf> вылетает access check failed
[23:44:07] <vgodunko> Так Вам и нужно"
[23:44:23] <vgodunko> Ptr /= Null and then Ptr.Mem /= null
[23:44:57] <vgodunko> использование простых форм and/or не гарантирует ни последовательность ни количество проверенных условий.
[23:45:44] <vgodunko> На современных машинах для выполнения проверок могут использоваться условные команды, это очень быстро, но...
[23:46:05] <vgodunko> ... возможны побочные эффекты.
[23:46:59] <vgodunko> Если же есть необходимость зафиксировать порядок вычисления и предотвратить вычисление последующих подвыражений, то необходимо использовать короткозамкнутые формы and then/or else
[23:47:12] <vgodunko> landgraf: #303 реализован.
[23:47:48] <vgodunko> Пример использования см. http://forge.ada-ru.org/matreshka/browser/trunk/matreshka/testsuite/sql/TN-303/test_303.adb
[23:56:45] <landgraf> глупый вопрос, как экраинировать кавычки в строках?
[23:57:08] <subj_rs> """
[23:57:11] <subj_rs> вроде
[23:57:11] <vgodunko> Это ОЧЕНЬ дорогой вопрос!
[23:57:26] <vgodunko> В Ada коде?
[23:57:36] <landgraf> vgodunko,  Q.Prepare(+"PRAGMA encoding = UTF-8");
[23:57:39] <vgodunko> subj_rs секрет уже раскрыл
[23:57:40] <landgraf> вот тут )
[23:57:53] <subj_rs> да чо тут секретного?
[23:57:56] <vgodunko> А зачем такое делать?
[23:58:28] <vgodunko> Матрёшка сама умеет правильно разруливать проблемы кодировок
[23:58:28] <landgraf> без кавчек не работает, поставил одинарные )
[23:58:46] <vgodunko> Нужно удалить эту строку
[23:59:17] <vgodunko> Далее, в SQL не используются двойные кавычки, строковые литералы использую одинарные (апострофы)