SergioMadness/pwf

View on GitHub
framework/basic/db/QueryBuilder.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace pwf\basic\db;

class QueryBuilder
{
    /**
     * MySQL driver
     */
    const DRIVER_MYSQL = 'mysql';

    /**
     * PostgreSQL driver
     */
    const DRIVER_PG = 'pgsql';

    /**
     * Current driver
     *
     * @var string
     */
    private static $driver;

    /**
     * Set current driver
     *
     * @param string $driver
     */
    public static function setDriver($driver)
    {
        self::$driver = $driver;
    }

    /**
     * Get current driver
     *
     * @return string
     */
    public static function getDriver()
    {
        return self::$driver;
    }

    /**
     * Get query builder
     *
     * @return \pwf\components\querybuilder\interfaces\SelectBuilder
     * @throws \Exception
     */
    public static function select()
    {
        $result = null;

        switch (static::getDriver()) {
            case self::DRIVER_MYSQL:
                $result = new \pwf\components\querybuilder\adapters\MySQL\SelectBuilder();
                break;
            case self::DRIVER_PG:
                $result = new \pwf\components\querybuilder\adapters\PostgreSQL\SelectBuilder();
                break;
            default:
                throw new \Exception('Wrong query builder driver');
        }

        return $result;
    }

    /**
     * Get insert builder
     *
     * @return \pwf\components\querybuilder\interfaces\InsertBuilder
     * @throws \Exception
     */
    public static function insert()
    {
        $result = null;

        switch (static::getDriver()) {
            case self::DRIVER_MYSQL:
                $result = new \pwf\components\querybuilder\adapters\MySQL\InsertBuilder();
                break;
            case self::DRIVER_PG:
                $result = new \pwf\components\querybuilder\adapters\PostgreSQL\InsertBuilder();
                break;
            default:
                throw new \Exception('Wrong query builder driver');
        }

        return $result;
    }

    /**
     * Get update builder
     *
     * @return \pwf\components\querybuilder\interfaces\UpdateBuilder
     * @throws \Exception
     */
    public static function update()
    {
        $result = null;

        switch (static::getDriver()) {
            case self::DRIVER_MYSQL:
                $result = new \pwf\components\querybuilder\adapters\MySQL\UpdateBuilder();
                break;
            case self::DRIVER_PG:
                $result = new \pwf\components\querybuilder\adapters\PostgreSQL\UpdateBuilder();
                break;
            default:
                throw new \Exception('Wrong query builder driver');
        }

        return $result;
    }

    /**
     * Get delete builder
     *
     * @return \pwf\components\querybuilder\interfaces\DeleteBuilder
     * @throws \Exception
     */
    public static function delete()
    {
        $result = null;

        switch (static::getDriver()) {
            case self::DRIVER_MYSQL:
                $result = new \pwf\components\querybuilder\adapters\MySQL\DeleteBuilder();
                break;
            case self::DRIVER_PG:
                $result = new \pwf\components\querybuilder\adapters\PostgreSQL\DeleteBuilder();
                break;
            default:
                throw new \Exception('Wrong query builder driver');
        }

        return $result;
    }

    /**
     * Get condition builder
     *
     * @return \pwf\components\querybuilder\adapters\SQL\ConditionBuilder
     */
    public static function getConditionBuilder()
    {
        $result = null;

        switch (static::getDriver()) {
            default:
                $result = new \pwf\components\querybuilder\adapters\SQL\ConditionBuilder();
        }

        return $result;
    }
}