PostgreSQL

Intellect Board — cистема управления сайтом

Построение сайта на основе форума

Intellect Board — cистема управления сайтом »   Техническая поддержка версии 2.18 »   PostgreSQL
RSS

PostgreSQL

Текущий рейтинг темы: Нет
Выводить сообщения
Правила раздела

<<Назад  Вперед>>Страницы: 1 2 3 4 5 ... 7 8 9 10 11 * 12 13 14 15 16 17 18
Модераторы: aerograf, wsx
Печать
 
-KoT-
Почетный участник


Откуда: Красноярский край
Всего сообщений: 153
Рейтинг пользователя: 6

Репутация пользователя: 1

Ссылка


Дата регистрации на форуме:
26 апр. 2006
Победил последнюю известную ошибку. Лишнее поле порождалось скриптом, преобразующим запросы вида
"INSERT INTO table SET field=value" в "INSERT INTO table(field) VALUES(value)".
Такое поле появлялось, если в тексте сообщения встречается, например ".../index.php?t=17 Срок действия..." После доработки функции db_query заработало.
Доработка заключается в удалении подстрок, заключенных в неэкранированные двойные кавычки перед парсингом "незакавыченных" чисел:
function &db_query($query,$link,$debug=0) {
  $GLOBALS['query_count']++;
  $query=preg_replace("/MOD\(FLOOR\(/is","MOD((",$query);
  if (preg_match("/^\s*?INSERT\s+?INTO\s+?(\w+?)\s+?SET\s+?(.*)/is",$query,$match)) {
    preg_match_all("/([\w\d]+)\s*=\s*(\".*?(?<!\\\)\")/is",$match[2],$fields1);
    $tmp1=preg_replace("/([\w\d]+)\s*=\s*(\".*?(?<!\\\)\")/is","",$query);
  if (preg_match("/^\s*?INSERT\s+?INTO\s+?(\w+?)\s+?SET\s+?(.*)/is",$tmp1,$match1)) {
    preg_match_all("/([\w\d]+)\s*=\s*(\d+)\s*,/is",$match1[2]." ",$fields2); }
    $fnames=join(",",array_merge($fields1[1],$fields2[1]));
    $fdata=join(",",array_merge($fields1[2],$fields2[2]));
  $query="INSERT INTO ".$match[1]." (".$fnames.") VALUES (".$fdata.")";
  }
  $query=preg_replace("/(?<!\\\)\"/is","'",$query);
  if (preg_match("/^\s*?LOCK\s+?TABLE/is",$query)) return;
         .......... дальше без изменений ................


XXXX Pro написал:
[q]
Слушай, а вот это ты зачем добавил:
$query=preg_replace("/MOD\(FLOOR\(/is","MOD((",$query);
[/q]

Запрос....MOD(FLOOR(uo_time/".(24*60*60)."),7) в Postgre дает ошибку. Как оказалось, работает в таком виде:....MOD((uo_time/".(24*60*60)."),7)
Других ошибок пока не обнаружено, наверное можно рекомендовать к установке для тестирования...
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 3299
Рейтинг пользователя: 70


Ссылка


Дата регистрации на форуме:
29 сен. 2001
Только что проверил под PostgreSQL, floor там работает нормально.
По крайней мере, такой вот запрос выполняется:
SELECT MOD(FLOOR(5.4),2)

---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно!
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 3299
Рейтинг пользователя: 70


Ссылка


Дата регистрации на форуме:
29 сен. 2001
В итоге включения всех сделанных исправлений получился вот такой вот дистрибутив (для уменьшения объема я из него IRC-чат вырезал). Предлагаю протестировать еще раз, если все будет Ok, то завтра выложим уже как дистрибутив.

---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно!
-KoT-
Почетный участник


Откуда: Красноярский край
Всего сообщений: 153
Рейтинг пользователя: 6

Репутация пользователя: 1

Ссылка


Дата регистрации на форуме:
26 апр. 2006
Стандарт ANSI, блин... Или глюк Postgre?
ib_pg=# SELECT MOD(FLOOR((1151251199-10800)/3600),24);
ERROR:  функция mod(double precision, integer) не существует
ПОДСКАЗКА:  No function matches the given name and argument types. You may need to add explicit type casts.
ib_pg=#

ib_pg=# SELECT MOD(FLOOR((1151251199.0-10800)/3600),24);
mod
-----
  12
(1 запись)

ib_pg=#

ib_pg=# SELECT MOD(((1151251199-10800)/3600),24);
mod
-----
  12
(1 запись)

ib_pg=#
-KoT-
Почетный участник


Откуда: Красноярский край
Всего сообщений: 153
Рейтинг пользователя: 6

Репутация пользователя: 1

Ссылка


Дата регистрации на форуме:
26 апр. 2006

XXXX Pro написал:
[q]
получился вот такой вот дистрибутив
[/q]

Где?
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 3299
Рейтинг пользователя: 70


Ссылка


Дата регистрации на форуме:
29 сен. 2001
Понятно. Надо перед выполнением операции FLOOR приводить к типу FLOAT (или как он там называется)...
Дистрибутив предполагался быть в прикрепленном файле, но из-за ограничения размера файл не загрузился. Выкладываю еще раз.

Прикрепленный файл (intb218.zip, 359343 байт, скачан: 581 раз)
---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно!
-KoT-
Почетный участник


Откуда: Красноярский край
Всего сообщений: 153
Рейтинг пользователя: 6

Репутация пользователя: 1

Ссылка


Дата регистрации на форуме:
26 апр. 2006
Такое поведение, только если MOD(FLOOR()). Просто FLOOR() работает как обычно:
ib_pg=# SELECT FLOOR((1151251199-10800)/3600);
floor
--------
319788
(1 запись)

ib_pg=#

ib_pg=# SELECT FLOOR((1151251199.0-10800)/3600);
floor
--------
319788
(1 запись)

ib_pg=#
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 3299
Рейтинг пользователя: 70


Ссылка


Дата регистрации на форуме:
29 сен. 2001
Ну да. Но MOD у меня используется только в одном месте (в статистике) и подправить там запросы, вставив FLOAT, вполне реально. Только надо убедиться, что в MySQL это тоже работает...

---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно!
-KoT-
Почетный участник


Откуда: Красноярский край
Всего сообщений: 153
Рейтинг пользователя: 6

Репутация пользователя: 1

Ссылка


Дата регистрации на форуме:
26 апр. 2006
По-моему, можно оставить, как есть. В этом конкретном случае MOD((INT/INT),INT) ведет себя точно так же, как в MySQL MOD(FLOOR(INT/INT),INT).

По поводу дистрибутива — в файле auth.php нужно все-таки использовать$forum=$GLOBALS['forum'];
if (!$forum) $forum = "0";
Сразу после установки форума переменная $GLOBALS['forum'] пустая и не дает зайти с ошибкой "...неверный синтаксис для INTEGER..."
И сконвертировать install.php в win1251 — крокозяблы на первой же странице некоторых могут испугать...
файл photos.php не исправлен — ошибка в порядке перечисления таблиц и t__ratingsum/t__ratingcount без NULLIF
под именем pssql.sql на самом деле pssql.php
В прикреплении файлы, с которыми установка и начало работы проходит гладко.
Остальное до завтра постараюсь протестировать.

Прикрепленный файл (workfiles.rar, 17302 байт, скачан: 704 раза)
-KoT-
Почетный участник


Откуда: Красноярский край
Всего сообщений: 153
Рейтинг пользователя: 6

Репутация пользователя: 1

Ссылка


Дата регистрации на форуме:
26 апр. 2006
При попытке редактирования статей, носвостей, словаря и фотогалереи вылетает:Query failed: ERROR: lastval is not yet defined in this session Файловый архив редактируется нормально. Коментарии во всех разделах редактируются нормально, добавление новых фото/статей/файлов/новостей/словарных статей работает.
<<Назад  Вперед>>Страницы: 1 2 3 4 5 ... 7 8 9 10 11 * 12 13 14 15 16 17 18
Модераторы: aerograf, wsx
Печать
Intellect Board — cистема управления сайтом »   Техническая поддержка версии 2.18 »   PostgreSQL
RSS

2 посетителя просмотрели эту тему за последние 10 минут
В том числе: 2 гостя, 0 скрытых пользователей

Последние RSS
Ограничение доступа
не отображаются разделы
Архив версий
Установка стиля на Intellect Board 2.22
Завершилась работа над новой версией 3.00

Самые активные 5 тем RSS


Время выполнения скрипта: 0.0522. Количество выполненных запросов: 18, время выполнения запросов 0.0000
Creative Commons License Rambler's Top100 Rambler's Top100 Рейтинг@Mail.ru Valid HTML 4.01 Transitional Valid CSS!