/** * {@inheritdoc} */ public function renderStatement($type, $data) { switch (strtolower($type)) { case 'select': extract($data); $fields = trim($fields); if (strpos($limit, 'TOP') !== false && strpos($fields, 'DISTINCT ') === 0) { $limit = 'DISTINCT ' . trim($limit); $fields = substr($fields, 9); } if (preg_match('/offset\\s+([0-9]+)/i', $limit, $offset)) { $limit = preg_replace('/\\s*offset.*$/i', '', $limit); preg_match('/top\\s+([0-9]+)/i', $limit, $limitVal); $offset = intval($offset[1]) + intval($limitVal[1]); $rOrder = $this->switchSort($order); list($order2, $rOrder) = [$this->mapFields($order), $this->mapFields($rOrder)]; $query = "SELECT * FROM (SELECT {$limit} * FROM ("; $query .= "SELECT TOP {$offset} {$fields} FROM {$table} {$alias} {$joins} "; $query .= "{$conditions} {$group} {$order}) AS Set1 {$rOrder}) AS Set2 {$order2}"; return $query; } else { return "SELECT {$limit} {$fields} FROM {$table} {$alias} {$joins} {$conditions} {$group} {$order}"; } break; case 'schema': extract($data); $indexes = $data['indexes']; $columns = $data['columns']; foreach ($indexes as $i => $index) { if (preg_match('/PRIMARY KEY/', $index)) { unset($indexes[$i]); break; } } foreach (['columns', 'indexes'] as $var) { if (is_array(${$var})) { ${$var} = "\t" . implode(",\n\t", array_filter(${$var})); } } return 'CREATE TABLE ' . $data['table'] . " (\n" . $columns . ");\n" . $indexes; break; default: return parent::renderStatement($type, $data); break; } }