public function prepare( $val, $col=null, $type=null )
    {
        if( is_array( $val ) ) {
            $holder = [];
            foreach( $val as $key => $v ) {
                $holder[$key] = $this->prepare( $v, $col, $type );
            }
            return $holder;
        }
        if( $val instanceof \Closure ) return $val;

        $holder  = ( static::$useColumnInBindValues ) ? ':' : ''; 
        $holder .=  'db_prep_' . $this->prepared_counter++;
        $this->prepared_values[ $holder ] = $val;
        $this->setPreparedType( $holder, $col, $type );
        if( !static::$useColumnInBindValues ) $holder = ':'.$holder;
        return $holder;
    }