public function testEscape() { Context::setMode('ANSI_QUOTES'); $this->assertEquals('"test"', Context::escape('test')); Context::setMode(); $this->assertEquals('`test`', Context::escape('test')); $this->assertEquals(array('`a`', '`b`'), Context::escape(array('a', 'b'))); }
/** * @param Expression|Expression[] $component The component to be built. * @param array $options Parameters for building. * * @return string */ public static function build($component, array $options = array()) { if (is_array($component)) { return implode($component, ', '); } else { if ($component->expr !== '' && !is_null($component->expr)) { $ret = $component->expr; } else { $fields = array(); if (isset($component->database) && $component->database !== '') { $fields[] = $component->database; } if (isset($component->table) && $component->table !== '') { $fields[] = $component->table; } if (isset($component->column) && $component->column !== '') { $fields[] = $component->column; } $ret = implode('.', Context::escape($fields)); } if (!empty($component->alias)) { $ret .= ' AS ' . Context::escape($component->alias); } return $ret; } }
/** * @param Reference $component The component to be built. * @param array $options Parameters for building. * * @return string */ public static function build($component, array $options = array()) { return trim(Context::escape($component->table) . ' (' . implode(', ', Context::escape($component->columns)) . ') ' . $component->options); }
/** * @param CreateDefinition|CreateDefinition[] $component The component to be built. * @param array $options Parameters for building. * * @return string */ public static function build($component, array $options = array()) { if (is_array($component)) { return "(\n " . implode(",\n ", $component) . "\n)"; } else { $tmp = ''; if ($component->isConstraint) { $tmp .= 'CONSTRAINT '; } if (isset($component->name) && $component->name !== '') { $tmp .= Context::escape($component->name) . ' '; } if (!empty($component->type)) { $tmp .= DataType::build($component->type, array('lowercase' => true)) . ' '; } if (!empty($component->key)) { $tmp .= $component->key . ' '; } if (!empty($component->references)) { $tmp .= 'REFERENCES ' . $component->references . ' '; } $tmp .= $component->options; return trim($tmp); } }
/** * @param Key $component The component to be built. * @param array $options Parameters for building. * * @return string */ public static function build($component, array $options = array()) { $ret = $component->type . ' '; if (!empty($component->name)) { $ret .= Context::escape($component->name) . ' '; } $columns = array(); foreach ($component->columns as $column) { $tmp = Context::escape($column['name']); if (isset($column['length'])) { $tmp .= '(' . $column['length'] . ')'; } $columns[] = $tmp; } $ret .= '(' . implode(',', $columns) . ') ' . $component->options; return trim($ret); }
/** * @param Expression $component The component to be built. * * @return string */ public static function build($component) { if (!empty($component->expr)) { $ret = $component->expr; } else { $fields = array(); if (!empty($component->database)) { $fields[] = $component->database; } if (!empty($component->table)) { $fields[] = $component->table; } if (!empty($component->column)) { $fields[] = $component->column; } $ret = implode('.', Context::escape($fields)); } if (!empty($component->alias)) { $ret .= ' AS ' . Context::escape($component->alias); } return $ret; }
/** * @param FieldDefinition|FieldDefinition[] $component The component to be built. * * @return string */ public static function build($component) { if (is_array($component)) { $ret = array(); foreach ($component as $c) { $ret[] = static::build($c); } return "(\n" . implode(",\n", $ret) . "\n)"; } else { $tmp = ''; if ($component->isConstraint) { $tmp .= 'CONSTRAINT '; } if (!empty($component->name)) { $tmp .= Context::escape($component->name) . ' '; } if (!empty($component->type)) { $tmp .= DataType::build($component->type) . ' '; } if (!empty($component->key)) { $tmp .= Key::build($component->key) . ' '; } if (!empty($component->references)) { $tmp .= 'REFERENCES ' . Reference::build($component->references) . ' '; } $tmp .= OptionsArray::build($component->options); return trim($tmp); } }
/** * @param ParameterDefinition[] $component The component to be built. * @param array $options Parameters for building. * * @return string */ public static function build($component, array $options = array()) { if (is_array($component)) { return '(' . implode(', ', $component) . ')'; } else { $tmp = ''; if (!empty($component->inOut)) { $tmp .= $component->inOut . ' '; } return trim($tmp . Context::escape($component->name) . ' ' . $component->type); } }
/** * @param Key $component The component to be built. * * @return string */ public static function build($component) { $ret = $component->type . ' '; if (!empty($component->name)) { $ret .= Context::escape($component->name) . ' '; } $ret .= '(' . implode(',', Context::escape($component->columns)) . ')'; $ret .= OptionsArray::build($component->options); return trim($ret); }
/** * replaces db/table/column names with their aliases * * @param string $sql_query SQL query in which aliases are to be substituted * @param array $aliases Alias information for db/table/column * @param string $db the database name * @param string $table the tablename * @param string &$flag the flag denoting whether any replacement was done * * @return string query replaced with aliases */ public function replaceWithAliases($sql_query, $aliases, $db, $table = '', &$flag = null) { $flag = false; /** * The parser of this query. * * @var Parser $parser */ $parser = new Parser($sql_query); if (empty($parser->statements[0])) { return $sql_query; } /** * The statement that represents the query. * * @var CreateStatement $statement */ $statement = $parser->statements[0]; /** * Old database name. * * @var string $old_database */ $old_database = $db; // Replacing aliases in `CREATE TABLE` statement. if ($statement->options->has('TABLE')) { // Extracting the name of the old database and table from the // statement to make sure the parameters are corect. if (!empty($statement->name->database)) { $old_database = $statement->name->database; } /** * Old table name. * * @var string $old_table */ $old_table = $statement->name->table; // Finding the aliased database name. // The database might be empty so we have to add a few checks. $new_database = null; if (!empty($statement->name->database)) { $new_database = $statement->name->database; if (!empty($aliases[$old_database]['alias'])) { $new_database = $aliases[$old_database]['alias']; } } // Finding the aliases table name. $new_table = $old_table; if (!empty($aliases[$old_database]['tables'][$old_table]['alias'])) { $new_table = $aliases[$old_database]['tables'][$old_table]['alias']; } // Replacing new values. if ($statement->name->database !== $new_database || $statement->name->table !== $new_table) { $statement->name->database = $new_database; $statement->name->table = $new_table; $statement->name->expr = null; // Force rebuild. $flag = true; } foreach ($statement->fields as $field) { // Column name. if (!empty($field->type)) { if (!empty($aliases[$old_database]['tables'][$old_table]['columns'][$field->name])) { $field->name = $aliases[$old_database]['tables'][$old_table]['columns'][$field->name]; $flag = true; } } // Key's columns. if (!empty($field->key)) { foreach ($field->key->columns as $key => $column) { if (!empty($aliases[$old_database]['tables'][$old_table]['columns'][$column['name']])) { $field->key->columns[$key]['name'] = $aliases[$old_database]['tables'][$old_table]['columns'][$column['name']]; $flag = true; } } } // References. if (!empty($field->references)) { $ref_table = $field->references->table->table; // Replacing table. if (!empty($aliases[$old_database]['tables'][$ref_table]['alias'])) { $field->references->table->table = $aliases[$old_database]['tables'][$ref_table]['alias']; $field->references->table->expr = null; $flag = true; } // Replacing column names. foreach ($field->references->columns as $key => $column) { if (!empty($aliases[$old_database]['tables'][$ref_table]['columns'][$column])) { $field->references->columns[$key] = $aliases[$old_database]['tables'][$ref_table]['columns'][$column]; $flag = true; } } } } } elseif ($statement->options->has('TRIGGER')) { // Extracting the name of the old database and table from the // statement to make sure the parameters are corect. if (!empty($statement->table->database)) { $old_database = $statement->table->database; } /** * Old table name. * * @var string $old_table */ $old_table = $statement->table->table; if (!empty($aliases[$old_database]['tables'][$old_table]['alias'])) { $statement->table->table = $aliases[$old_database]['tables'][$old_table]['alias']; $statement->table->expr = null; // Force rebuild. $flag = true; } } if ($statement->options->has('TRIGGER') || $statement->options->has('PROCEDURE') || $statement->options->has('FUNCTION') || $statement->options->has('VIEW')) { // Repalcing the body. for ($i = 0, $count = count($statement->body); $i < $count; ++$i) { /** * Token parsed at this moment. * * @var Token $token */ $token = $statement->body[$i]; // Replacing only symbols (that are not variables) and unknown // identifiers. if ($token->type === Token::TYPE_SYMBOL && !($token->flags & Token::FLAG_SYMBOL_VARIABLE) || ($token->type === Token::TYPE_KEYWORD && !($token->flags & Token::FLAG_KEYWORD_RESERVED) || $token->type === Token::TYPE_NONE)) { $alias = $this->getAlias($aliases, $token->value); if (!empty($alias)) { // Replacing the token. $token->token = Context::escape($alias); $flag = true; } } } } return $statement->build(); }
/** * @param ParameterDefinition[] $component The component to be built. * * @return string */ public static function build($component) { $ret = array(); foreach ($component as $c) { $tmp = ''; if (!empty($c->inOut)) { $tmp .= $c->inOut . ' '; } $ret[] = trim($tmp . Context::escape($c->name) . ' ' . DataType::build($c->type)); } return '(' . implode(', ', $ret) . ')'; }
/** * @param Reference $component The component to be built. * * @return string */ public static function build($component) { return trim(Context::escape($component->table) . ' (' . implode(', ', Context::escape($component->columns)) . ') ' . OptionsArray::build($component->options)); }