phalconplus Documentation v1.1.1
Class
Class PhalconPlus Db Pdo

# Mysql

        namespace PhalconPlus\Db\Pdo;

    class Mysql extends AbstractMysql
    {
        public function __construct(array! descriptor, boolean autoConnect = true)
        {
            if autoConnect {
                this->connect(descriptor);
            } else {
                %{
                zephir_unset_property(this_ptr, "_pdo");
                }%
            }

            // ------------------------------------------------------ //
            // start coping from \Phalcon\Db\Adapter::__construct
            // ------------------------------------------------------ //

            var dialectClass, connectionId;

            let connectionId = self::_connectionConsecutive,
                this->_connectionId = connectionId,
                self::_connectionConsecutive = connectionId + 1;

            /**
             * Dialect class can override the default dialect
             */
            if !fetch dialectClass, descriptor["dialectClass"] {
                let dialectClass = "phalcon\\db\\dialect\\" . this->_dialectType;
            }

            /**
             * Create the instance only if the dialect is a string
             */
            if typeof dialectClass == "string" {
                let this->_dialect = new {dialectClass}();
            } else {
                if typeof dialectClass == "object" {
                    let this->_dialect = dialectClass;
                }
            }
            let this->_descriptor = descriptor;

            // ------------------------------------------------------ //
            // end coping
            // ------------------------------------------------------ //
        }

        public function __get(string! prop)
        {
            if prop == "_pdo" {
                %{
                add_property_null_ex(this_ptr, SL("_pdo") TSRMLS_CC);
                }%
                this->connect(this->_descriptor);
                return this->_pdo;
            }
            return null;
        }

        public function isUnderTransaction() -> boolean
        {
            string prop = "_pdo";
            int isPdoSet = 0;

            // var_dump(this);

            /*
             * Used to check if a property of the object exists
             * https://wiki.php.net/internals/engine/objects#the_handler_table
             *
             * param has_set_exists:
             * 0 (has) whether property exists and is not NULL
             * 1 (set) whether property exists and is true
             * 2 (exists) whether property exists
             */
            %{
            isPdoSet = Z_OBJ_HT_P(this_ptr)->has_property(this_ptr, &prop, 0, NULL);
            // isPdoSet = zephir_isset_property(this_ptr, SL("_pdo"));
            }%

            // var_dump(isPdoSet);
            if(isPdoSet == 0) {
                return false;
            }

            return parent::isUnderTransaction();
        }

    }