onPHP / onphp-framework

onPHP is the mature GPL'ed multi-purpose object-oriented PHP framework.
85 stars 52 forks source link

Несколько мелких накопившихся фиксов #221

Closed AlexeyDsov closed 9 years ago

AlexeyDsov commented 9 years ago

Раз уж я добрался сегодня до исправлений, то решил так же внести несколько фиксов накопвшихся в локальном репозитории. Если возражений нет, то в ближайшие дни замержу.

crazedr0m commented 9 years ago

вроде все правильно. пуляй.

DeryabinSergey commented 9 years ago

У меня все равно не работает

$currentTimeZone = new DateTimeZone(date_default_timezone_get());
$now = new DateTime('2012-02-01', $currentTimeZone);
$zone = $now->format('O');

print_r($now);
echo $zone;

Получится на выходе:

DateTime Object
(
    [date] => 2012-02-01 00:00:00.000000
    [timezone_type] => 3
    [timezone] => Europe/Moscow
)
+0400
AlexeyDsov commented 9 years ago

Все правильно, в 2012 Europe/Moscow имел зону +0400, как и надо. А вот если сделать new DateTime('now', $currentTimeZone);, то уже будет +0300

DeryabinSergey commented 9 years ago

Да, точно, туплю :+1: )

DeryabinSergey commented 9 years ago

Раз уж дошли до мелких правок - предлагаю в test/config.inc.php.tpl заменить

'MySQL' => array(

на

'MySQLim' => array(

Все таки deprecated уже

crazedr0m commented 9 years ago

+1

2014-11-12 12:51 GMT+03:00 DeryabinSergey notifications@github.com:

Раз уж дошли до мелких правок - предлагаю в test/config.inc.php.tpl заменить

'MySQL' => array(

на

'MySQLim' => array(

Все таки deprecated уже

— Reply to this email directly or view it on GitHub https://github.com/onPHP/onphp-framework/pull/221#issuecomment-62693773.

DeryabinSergey commented 9 years ago

И туда же тогда test/core/TruncateQueryTest.class.php

$myDialect = $this->getDbByType('MySQLim')->getDialect();

PS Погрепал - больше в коде не встречается

AlexeyDsov commented 9 years ago

готово

DeryabinSergey commented 9 years ago

Еще позанудствую немного ) Копался в истории, не нашел почему так, единственное что было из серьезных изменений - это что диалект перестал быть Singleton Так вот в core/DB/MyImprovedDialect.class.php в методе quoteValue для получения коннекта используется $this->getLink() (правда я не понял к чему комментарий: can't find better way atm.) а в методе quoteBinary для получения коннекта используется DBPool::me()->getLink()->getLink(). Первый вариант я так понимаю правильный, который стал обращаться к себе после того как диалект перестал быть Singleton. А еще в quoteBinary забыли добавить кавычки для значения. В итоге по мне вместо

        public function quoteBinary($data)
        {
            return mysqli_real_escape_string(DBPool::me()->getLink()->getLink(), $data);
        }

Должно быть:

        public function quoteBinary($data)
        {
            return "'".mysqli_real_escape_string($this->getLink(), $data)."'";
        }
AlexeyDsov commented 9 years ago

правда я не понял к чему комментарий: can't find better way atm.

Комментарий остался там от старого кода, когда он был:

// can't find better way atm.
DBPool::me()->getLink()->getLink(),

В quoteBinary внес исправления - 99223b8

Внезапно обнаружил что сломались savepoint'ы в MySQL. Добавил тест InnerTransactionDBTest::testSavepoint для обнаружения ошибки. Суть ошибки заключается в том что они не релизятся - пишет что не может найти указанный savepoint. На 99.99% уверен что ранее они работали. Особенно когда я реализовывал savepoint'ы, то помню что сначала сделал на MySQL и Postgres и только потом когда все работало прикрутил к SQLite.

DeryabinSergey commented 9 years ago

У меня тесты с транзакциями не отрабатывают. Пока не могу сказать в чем дело, у меня проблема или нет, только завтра буду дальше смотреть

четверг, 13 ноября 2014 г. пользователь Alexey Denisov написал:

правда я не понял к чему комментарий: can't find better way atm.

Комментарий остался там от старого кода, когда он был:

// can't find better way atm.DBPool::me()->getLink()->getLink(),

В quoteBinary внес исправления - 99223b8 https://github.com/onPHP/onphp-framework/commit/99223b8a7c64f07254ddbb9f8ddba3bc71f2c948

Внезапно обнаружил что сломались savepoint'ы в MySQL. Добавил тест InnerTransactionDBTest::testSavepoint для обнаружения ошибки. Суть ошибки заключается в том что они не релизятся - пишет что не может найти указанный savepoint. На 99.99% уверен что ранее они работали. Особенно когда я реализовывал savepoint'ы, то помню что сначала сделал на MySQL и Postgres и только потом когда все работало прикрутил к SQLite.

— Reply to this email directly or view it on GitHub https://github.com/onPHP/onphp-framework/pull/221#issuecomment-62852468.

AlexeyDsov commented 9 years ago

Все поправил вроде бы.

  1. MySQL по дефолту использовал MyIsam и про транзакции он не слышал от того и savepoint'ы не работали.
  2. MySQL::isConnected работал не правильно. link в данном случае объект mysqli, а не resource.
DeryabinSergey commented 9 years ago

Че-то в тесте

$this->pool[$connector]->setDefaultEngine('INNODB');

Как-то глаз режет, может энджайны вынести в константы MySQLim?

AlexeyDsov commented 9 years ago

Я думаю в тестовом классе (а класс используется для тестов и находится в соотвествующей директории) такое можно себе позволить. Учитывая что onPHP не особо базы создает хорошо на данный момент, а эта настройка нужна только для такого случая, то, думаю, это можно и пережить.

DeryabinSergey commented 9 years ago

Ну что, мержите уже )

AlexeyDsov commented 9 years ago

готово. ветки master, 1.1, masterNs

DeryabinSergey commented 9 years ago

Уже стянул, спасибо

понедельник, 24 ноября 2014 г. пользователь Alexey Denisov написал:

готово. ветки master, 1.1, masterNs

— Reply to this email directly or view it on GitHub https://github.com/onPHP/onphp-framework/pull/221#issuecomment-64159112.