PHP Фреймворк CodeIgniter — скоро для пользователей CUBRID

    Заголовок уже говорит обо всем. Но я расскажу более подробно о начале разработки и взаимодействии CUBRID с CodeIgniter. Также здесь Вы узнаете об отличиях между CUBRID и MySQL с точки зрения разработки и адаптирования приложений.

    В начале этого месяца я решил поработать над драйвером CUBRID для CI — популярного PHP фреймворка, который используется очень многими Веб разработчиками. Один из веб сервисов в нашей компании хочет использовать CI у себя с CUBRID. К счастью, у этого фреймворка довольна интуитивная структура, что позволило мне быстро найти классы, которые необходимо унаследовать и реализовать для CUBRID.

    Драйвера всех остальных поддерживаемых СУБД я нашел в директории /system/database/drivers. Так как CUBRID поддерживает более 90% SQL синтаксиса MySQL, не было необходимости начинать все с нуля. Я начал работать над уже готовым MySQL драйвером для CI. На следующий день у меня уже был рабочий код CUBRID драйвера. Пару дней спустя я провел тесты (к сожалению, как сказал один из разработчиков CodeIgniter, у них еще нет юнит тестов, которые охватывали бы весь фреймворк, включая драйвера баз данных, поэтому мне пришлось писать свои тесты). Как только драйвер прошел все тесты, я связался с их разработчиками и отправил pull-запросы в главную ветку и ветку для разработок.

    Ниже я опишу, какие части кода я изменил в MySQL драйвере, чтобы он стабильно заработал для CUBRID. Надеюсь, эти записи будут полезны тем, кто планирует влючить поддержку СУБД CUBRID в своих Веб приложениях.

    1. Название базы в момент соединения
      В отличие от MySQL, соединение в CUBRID производиться напрямую с базой данных, т.е. DSN должен содержать информацию о базе, к которой Вы собираетесь соединиться. Такой способ исключает необходимость «выбирать базу» после соединения. В принципе, также работает и Oracle.
      $conn = cubrid_connect($this->hostname, $this->port, $this->database, $this->username, $this->password);
    2. Порт Брокера
      По умолчанию 33000 является портом Брокера. При необходимости это значение можно изменить в параметрах Брокера.
    3. Auto commit
      По умолчанию auto_commit в СУБД CUBRID отключен (OFF). Это означает, что разработчикам необходимо делать commit каждой транзакции. Таким образом, пользователи могут обрабатывать запросы в так называемом сухом режиме, когда они могут получать результаты запросов без изменений в базе данных. Полезно во время разработок. Выводя сайт в реальный режим, Вы можете изменить значение auto_commit на ON в конфигурационном файле CI database.php, как указано ниже, либо прямо в параметрах Брокера.
      $db['default']['hostname'] = 'localhost';
      $db['default']['port'] = '33000';
      $db['default']['username'] = 'dba';
      $db['default']['password'] = 'ci_pass';
      $db['default']['database'] = 'ci_demo';
      $db['default']['auto_commit'] = TRUE;
      $db['default']['dbdriver'] = 'cubrid';
      $db['default']['dbprefix'] = 'tbl_';

    4. Квотирование имен столбцов
      Иногда Вам необходимо создать столбец с именем, который уже зарезервирован самой СУБД в качестве ключевого слова. В MySQL, например, такие идентификаторы (названия таблиц/столбцов/представлений и т.п.) можно брать в левые кавычки, например, `time`. В MSSQL необходимо использовать квадратные скобки ( [time] ). В Oracle — двойные кавычки ( «time» ).
      В СУБД CUBRID можно использовать все три: и левые, и двойный кавычки, и квадратные скобки. Двойные кавычки можно использовать для выделения идентификаторов по умолчанию, так как значение параметра ansi_quotes в конфигурационном файле CUBRID cubrid.conf указан как no (т.е. не использовать двойные кавычки для выделения строковых значений). Если же это значение изменить на yes, то двойные кавычки можно будет использовать только для строковых значений. Таким образом, Вы можете использовать в качестве обрамления идентификаторов тот символ, к которому Вы уже привыкли.
      Квотирование идентификаторов Обромление строковых значений
      ansi_quotes = NO (по умолчанию) левые кавычки`time`
      квадратные скобки [time]
      двойные кавычки «time»
      одинарные кавычки для строковых значений: 'normal string'
      ansi_quotes = YES левые кавычки`time`
      квадратные скобки [time]
      одинарные и двойные кавычки для строковых значений: 'normal string', «normal string»

    5. Оптимизация, Исправление, Резервное копирование
      CUBRID не предоставляет возможности манипулирования этими функциями через SQL заросы. Если необходимо оптимизировать, исправить базу данных или сделать резервное копирование, необходимо использовать главный инструмент администрирования CUBRID Manager.

    Помимо этих отличий других изменений в SQL запросах я не делал, так как почти все запросы MySQL работают и в CUBRID. Это говорит о том, насколько CUBRID совместим с MySQL и насколько легко делать порт приложений, работающих с MySQL.

    Этим примером я хотел показать, что адаптировать приложения, даже такие большие, как CodeIgniter, очень легко, и это займет не более нескольких дней для новичка в CUBRID. Поэтому, если Вы намереваетесь адаптировать что-либо, не колебайтесь. Это не займет много времени, Вы сами убедитесь в этом. И да, если Вам нужна помощь в этом деле, дайте нам знать на нашем форуме, и мы будем рады помочь Вам.

    Что касается исходного кода CUBRID драйвера, как Вы уже, думаю, знаете, то CodeIgniter недавно официально перехал на сервис GitHub. За несколько дней до этого я уже закоммитил изменения в их готовищийся репозиторий, который сейчас уже закрылся, а его код был объединен с официальным.

    Сразу после перехода на GitHub один из их разработчиков сообщил, что CI выкатит поддержку CUBRID уже в версии 2.1.0. Будем ждать!

    А если Вы не хотите ждать и уже желаете потестить CI + CUBRID, Вы можете слить код с ветки develop их официального репо. Если Вам посчастливиться найти какой-нибудь баг, я буду рад немедленно его исправить. Вы можете сообщите об этом на нашем форуме, либо в Твиттере.

    Если будут вопросы по установке и работе с CUBRID, пишите в комментариях. Также если есть идеи насчет приложения, для которой можно разработать CUBRID драйвер, пишите. Буду рад о них поговорить.
    CUBRID
    10,00
    Компания
    Поделиться публикацией

    Комментарии 2

      0
      В версию CI 2.1 обещают и Sparks добавить… и еще похоже правильно они сделали что решили переехать на GitHub
        +1
        Да, Sparks будет замечательно.
        Mercurial очень удобен, надежен, мало проблем с конфликтами. Идеально для закрытых проектов, либо компаний. А вот для открытого сообщества GitHub — самый кайф. Очень удобен для «общения» с реальными пользователям. Если бы не перешли на GitHub, они бы, возможно, даже и не стали обращать на мой код, не говоря уже о его проверке. Так что они на коне!

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.