Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Невозможно получить данные из только что созданных колонок / 1 сообщений из 1, страница 1 из 1
09.09.2011, 12:49
    #37432499
Gemorroj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Невозможно получить данные из только что созданных колонок
Текущее значение для колонок countProductSelect и countProductInput - INTEGER NOT NULL;
Нужно сделать INTEGER DEFAULT NULL;
Код на PHP ниже.
Проблема в том, что при попытке обновления данных в countProductSelect и countProductInput из временных колонок countProductSelectTmp и countProductInputTmp получаю ошибку "no such column: countProductSelectTmp".
Как бороться? Или может быть есть более грамотные алгоритмы решения изначальной задачи?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
    /**
     * Обновление базы данных
     * 
     * @return bool
     */
    protected  function  _updateDB()
    {
// ...
            $version = '3.8.4.0';

            $this->_pdo-> exec ('
                ALTER TABLE data ADD optionalCountProduct INTEGER DEFAULT NULL;
                ALTER TABLE data ADD countProductSelectTmp INTEGER DEFAULT NULL;
                ALTER TABLE data ADD countProductInputTmp INTEGER DEFAULT NULL;
                UPDATE data SET countProductSelectTmp = countProductSelect, countProductInputTmp = countProductInput;
            ');

            $this->_deleteSQLIteColumn( array ('countProductSelect', 'countProductInput'));

            // Тут баг
            // countProductSelect и countProductInput не могут получить значения countProductSelectTmp и countProductInputTmp
            $this->_pdo-> exec ('
                ALTER TABLE data ADD countProductSelect INTEGER DEFAULT NULL;
                ALTER TABLE data ADD countProductInput INTEGER DEFAULT NULL;
                UPDATE data SET countProductSelect = countProductSelectTmp, countProductInput = countProductInputTmp;
                UPDATE version SET id = "' . $version . '";
            ');

            $this->_deleteSQLIteColumn( array ('countProductSelectTmp', 'countProductInputTmp'))

         return   true ;
    }


    /**
     * Удаляем колнку из SQLite таблицы
     * 
     * @param array $column имя колонки для удаления
     * @return bool
     */
    protected  function  _deleteSQLIteColumn( array  $column)
    {
         return  (bool)$this->_pdo-> exec ('
            BEGIN TRANSACTION;
            CREATE TEMPORARY TABLE backup(' . $this->_getFullColumnsString() . ');
            INSERT INTO backup SELECT ' . $this->_getShortColumnsString() . ' FROM data;
            DROP TABLE data;
            CREATE TABLE data(' . $this->_getFullColumnsString($column) . ');
            INSERT INTO data SELECT ' . $this->_getShortColumnsString($column) . ' FROM backup;
            DROP TABLE backup;
            COMMIT;
        ');
    }
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Невозможно получить данные из только что созданных колонок / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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