private function processQueryDefinition(array $query_definition)
    {
        // Store defintion
        $this->definition = $query_definition;
        
        if (! empty($this->definition['scheme'])) {
            $this->scheme = $this->definition['scheme'];
        }
        
        // Use set query type or use 'row' as default
        if (isset($this->definition['method'])) {
            $this->method = strtoupper($this->definition['method']);
            unset($this->definition['method']);
        }
        
        // All methods need the table defintion
        $this->processTableDefinition();
        
        // Process data definition?
        if (isset($this->definition['data'])) {
            $this->processDataDefinition();
        }
        
        switch ($this->method) {
            
            case 'INSERT':
            case 'REPLACE':
                $this->processInsert();
                break;
            
            case 'UPDATE':
                $this->processUpdate();
                break;
            
            case 'DELETE':
                $this->processDelete();
                break;
            
            default:
                $this->processSelect();
                break;
        }
        
        return $this;
    }