Список разделов › phpBBex 1.x (поддерживается) › Пожелания 1.x
hg diff > sqlite3.patch
hg clone -r v1.6.0 https://code.google.com/p/phpbbex/ forum
hg add
hg diff > sqlite3.patch
+
всюду -
и наоборот). $sql_ary = array(
'created' => (int) time(),
'last_visit' => (int) time(),
'visits' => (int) visits + 1,
'agent' => (string) $db->sql_escape($agent),
'last_ip' => (string) $db->sql_escape($this->ip),
);
$sql = "UPDATE " . USER_BROWSER_IDS_TABLE
. " SET " . $db->sql_build_array('UPDATE', $sql_ary)
. " WHERE browser_id='" . $db->sql_escape($browser_id)
. "' OR user_id='" . $db->sql_escape($user_id) . "'";
(int) visits + 1
не будет вычислено, ибо в коде нет константы visits. // Update stats
$sql_ary = array(
'created' => (int) time(),
'last_visit' => (int) time(),
'agent' => (string) $db->sql_escape($agent),
'last_ip' => (string) $db->sql_escape($this->ip),
);
$sql = "UPDATE " . USER_BROWSER_IDS_TABLE
. " SET " . $db->sql_build_array('UPDATE', $sql_ary)
. ", visits = visits + 1"
. " WHERE browser_id='" . $db->sql_escape($browser_id)
. "' OR user_id='" . $db->sql_escape($user_id) . "'";
$db->sql_query($sql);
Смеётесь?VEG:Приведённым выше способом её установку можно свести к копированию одного файла.
Борис Бердичевский:Этот вариант у меня заменен эквивалентным, стандартным, везде в phpBB используемым -- "SET" -- "WHERE".
$sql = "INSERT INTO " . USER_BROWSER_IDS_TABLE . "
SET browser_id='" . $db->sql_escape($browser_id) . "', user_id='" . $db->sql_escape($user_id) . "',
created=UNIX_TIMESTAMP(), last_visit=UNIX_TIMESTAMP(), visits=1,
agent = '" . $db->sql_escape($agent) . "', last_ip = '" . $db->sql_escape($this->ip) . "'
ON DUPLICATE KEY UPDATE last_visit=UNIX_TIMESTAMP(), visits=visits+1,
agent = '" . $db->sql_escape($agent) . "', last_ip = '" . $db->sql_escape($this->ip) . "'";
$sql_ary = array(
'created' => (int) time(),
'last_visit' => (int) time(),
'visits' => (int) visits + 1,
'agent' => (string) $db->sql_escape($agent),
'last_ip' => (string) $db->sql_escape($this->ip),
);
$sql = "UPDATE " . USER_BROWSER_IDS_TABLE
. " SET " . $db->sql_build_array('UPDATE', $sql_ary)
. " WHERE browser_id='" . $db->sql_escape($browser_id)
. "' OR user_id='" . $db->sql_escape($user_id) . "'";
(int) visits + 1
, плюс ваш код вообще никогда не создаёт записи в таблице USER_BROWSER_IDS_TABLE — он их только обновляет. То есть смысл этого кода полностью нарушен и он не выполняет никакой полезной работы. Без ON DUPLICATE KEY UPDATE
здесь нужно писать два или даже три запроса (проверка — есть ли запись, и если есть — UPDATE, если нет — INSERT).На сколько я вижу, если бы вы использовали идентификатор sqlite вместо sqlite_3 — как минимум половины правок можно было бы избежать. Сами посмотрите на свой патч. Половина правок — это добавлениеБорис Бердичевский:Как автор МОДа утверждаю -- НЕТ.
case 'sqlite_3'
там, где уже есть case 'sqlite'
.Дело в том, что в случае встроенной поддержки SQLite, вся работа по тестированию и поддержке этой БД ляжет на разработчика phpBBex. Я потому и отказался от поддержки посторонних и используемых редко баз данных, чтобы не тратить на это время.Борис Бердичевский:Я вот долгое время мучаюсь с обновлениями phpBB, каждый раз патч обновления нужно препарировать, вносить поддержку sqlite 3 и только потом запускать!
UNIX_TIMESTAMP()
и ON DUPLICATE KEY UPDATE
не был протестирован на предмет работоспособности. То есть чтобы включить этот код, нужно начинать полномасштабное тестирование всех запросов, которые были добавлены или изменены в phpBBex за всё время, и двойное тестирование всех будущих изменений в phpBBex. К сожалению, я к этому не готов. Внешней видимости «всё ок» как в примере с запросом выше недостаточно. Оно только делает вид, что работает, а на самом деле работает не так как нужно.ON DUPLICATE KEY UPDATE
— если совместимость и есть, то она достаточно формальна, и находится в пределах чистого SQL без расширений.Я здесь напутал, думал, что речь идёт о phpBB 3.1. И что это такое, можно подробнее?VEG:сейчас для phpBBex 2.x разрабатывается новый современный слой доступа к БД. По планам он будет поддерживать только MySQL и PHP 5.3+,
А что там тестировать? Вариант ON DUPLICATE KEY UPDATE просто не работает в sqlite, так что тестировать нечего.VEG:Вы предлагаете код для встраивания, который судя по всему тестировали только поверхностно. Первый попавшийся проблемный момент с UNIX_TIMESTAMP() и ON DUPLICATE KEY UPDATE не был протестирован на предмет работоспособности.
А в чём проблема-то? Конструкция эта вполне заменяема эквивалентом, что я и сделал.VEG:Но судя по отсутствию популярной конструкции ON DUPLICATE KEY UPDATE
Расширение?VEG:Нужно будет провести ряд тестов, чтобы оценить перспективы подобного «расширителя» SQLite со стороны PHP.
Просто новый и современный слой доступа. В phpBB 3 ядро написано в стиле десятилетней давности. И в 3.1 мало что изменилось. В phpBBex планируются серьёзные обновления базовых подсистем движка.Борис Бердичевский:И что это такое, можно подробнее?
Я уже описал выше, почему достаточно поддержки одного MySQL. Написание кода только под одну БД позволяет задействовать все её возможности и лучше оптимизировать код. Также это позволяет сократить время тестирования.Борис Бердичевский:И почему только MySQL ?
Прочитайте моё предыдущее сообщение. Ваша конструкция никогда не вставляет новых записей, как следствие — ей нечего обновлять. А поскольку обновлять нечего, в результате функция вообще ничего не делает. Рекомендую изучить документацию по INSERT ... ON DUPLICATE KEY UPDATE. Эту конструкцию нельзя сэмулировать одним запросом. Нужно минимум два: INSERT и UPDATE.Борис Бердичевский:Конструкция эта вполне заменяема эквивалентом, что я и сделал.
Расширение на C++ для PHP конечно же было бы самым крутым вариантом. Но для большинства пользователей это поставит крест на движке — вряд ли кто-то захочет разбираться со сборкой и установкой расширений PHP, плюс не везде вообще это возможно. Есть кое-какие идеи, как можно было бы попробовать без значительных потерь в производительности сделать небольшое расширение синтаксиса SQL в SQLite немного необычной обёрткой на PHP.Борис Бердичевский:Расширение?
Как я уже писал, отказ от поддержки непопулярных в мире PHP баз данных — это сознательное и обоснованное решение. Вообще поддержка различных БД кроме MySQL в PHP скриптах — это скорее приятное дополнение, чем весомое преимущество. Тот же WordPress всегда поддерживал только MySQL, но это не помешало ему стать самым популярным движком. Так уж сложилось, что PHP обычно используется вместе с MySQL, и это всюду поддерживается.Борис Бердичевский:Это в phpBBex произведено "усечение" поддерживаемых типов БД. Если вы ратуете за кучу достоинств ex по сравнению со стандартным phpBB, то это "усечение" -- не самая верная идея.
Речь о том, чтобы добавить в слой доступа к SQLite поддержку конструкций, которые он не понимает. То есть тот же ON DUPLICATE KEY UPDATE.Борис Бердичевский:Только отмечу, что никаких расширений C++ в php это уже не требует, начиная с 5.3 это поддерживается автоматически.
Удалил.Борис Бердичевский:Ещё раз -- убедительная просьба удалить все мои вложения, кроме как из первого поста!
А зачем, когда есть аналог на базе SQL запроса?VEG:Речь о том, чтобы добавить в слой доступа к SQLite поддержку конструкций, которые он не понимает. То есть тот же ON DUPLICATE KEY UPDATE.