goDB 1.3: Транзакции и все, все, все

goDB 1.3: новый говнокод и ебическая сила природы в одном флаконе. Домохозяйки выбирают goDB.

В новой версии при сохранении совместимости с mysqli добавлены надстройки по следующим пунктам:

Транзакции

  1. Станартная схема: BEGIN + COMMIT(ROLLBACK)
  2. Вложенные транзакции, где транзакции нижних уровней не знают о верхних.
  3. Различные способы отката из вложенных транзакций и его обработки.
  4. Выполнение функций в транзакциях

Мультизапросы

  1. Мультизапросы по goDB-схеме: с шаблонами, данными и форматами разбора.
  2. Получение всех результатов сразу или получение только нужных
  3. Различные способы формирования мультизапроса
  4. Обработка ошибок на основе исключений
  5. Не нужно думать о выборке всех результатов и их очистке
  6. Мультизапросы в транзакциях и без них.

Подготовленные выражения

  1. goDB-схема (шаблон, данные, формат результата) вместо bind_param, bind_result
  2. Полная поддержка форматов представления результатов
  3. Обработка ошибок на основе исключений.
  4. Создание и выполнение подготовленного выражения одним запросов.
  5. Кэширование подготовленных выражений.
  6. Именованные подготовленные выражения.

Кроме того, добавлены следующие возможности:

Объект-ссылка

Объект ссылка разделяет подключение с основным объектом, но может иметь другие настройки (префикс, отладка, декоратор запросов).

По мелочи

Формат разбора bool.

Метод __invoke().
В PHP 5.3 запросы можно выполнять прямо так: $one = $db('SELECT 1', null, 'el');

Методы getPrefix(), getDebug() и т.д.

Реструктуризация юнит-тестов: теперь вместо одного файла папка с тестами.

@todo

Все предложения пишите на форуме или присылайте на мыло.

В ближайшее время возможно следующее:

  1. Макроподстановки
  2. Разбиение godb.php на несколько файлов
  3. Формат разбора: объект для разбора :)
  4. Начало работы над goDB 2.0
  5. Нормальные шрифты и цвета для доки

Взять себе

Взять себе
goDB 1.3.0 (zip, 31K)

11 комментариев »

  • Круто ты взялся )) Но не усложняй сильно…

    kostyl, 11.10.2010, 13:43

  • есть в этой версии досадный баг: в goDBPrepare->execute знак «&» явно лишний вот в этом месте
    if ($this->paramsCount > 0) {
    $params = array($this->types);
    foreach ($data as $d) {
    $params[] = &$d;
    }
    call_user_func_array(array($stmt, ‘bind_param’), $params);
    }

    webpavilion, 3.12.2010, 18:12

  • webpavilion, на какой версии php он лишний?

    kostyl, 4.12.2010, 15:59

  • webpavilion, спасибо за комментарий. Однако, знак «&» здесь был введён намеренно — дабы аргументы в bind_param через call_user_func_array передавались по ссылке.

    А в чём выражается баг? Что-то не так работает?

    vasa_c, 4.12.2010, 16:00

  • в 5.2.10 в $params записываются 1, соответственно в базу пишутся они же, если убрать все работает нормально. зачем именно в этом контексте передавать по ссылке?

    webpavilion, 5.12.2010, 13:33

  • >>webpavilion
    >>если убрать все работает нормально
    А если не убирать, что происходит?

    kostyl, 5.12.2010, 14:55

  • http://paste.org/pastebin/view/25772 первый вариант считаю правильным, второй соответственно нет

    webpavilion, 5.12.2010, 15:37

  • webpavilion . Вообще то инкремент со строками в php не рекомендуется, читай ман…

    kostyl, 5.12.2010, 15:42

  • >>kostyl
    вообще то это просто пример что бы показать проблему, уж как нибудь сам разберусь что читать.

    webpavilion, 5.12.2010, 15:44

  • webpavilion, по ссылке нужно передавать, потому что bind_param() принимает аргументы по ссылке.
    Странно, что в 5.2 без этого работает нормально, у меня в 5.3 выдаёт:
    Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given

    Но это решилось добавлением ещё одного «&»:

    foreach ($data as &$d) {
        $params[] = &$d;
    }
    

    Проверьте, пожалуйста, у себя

    vasa_c, 5.12.2010, 16:44

  • >>vasa_c
    с еще одним & в 5.2 работает корректно.

    webpavilion, 5.12.2010, 16:55

Leave a comment