final public AppendIdentifiers ( $QueryStringFormat, array $Identifiers, $Delimiter, $ValuePlaceholder = self::DefaultPlaceholder ) | ||
$Identifiers | array |
protected function UpsertRowsQuery(QueryBuilder $QueryBuilder, Table $Table, array $Rows, $ShouldReturnKeyData) { if ($ShouldReturnKeyData) { throw new \Storm\Drivers\Base\Relational\PlatformException('Mysql does not support returning data'); } $Columns = $Table->GetColumns(); $PrimaryKeyColumns = $Table->GetPrimaryKeyColumns(); $ColumnNames = array_keys($Columns); $PrimaryKeyColumnNames = array_keys($PrimaryKeyColumns); $TableName = $Table->GetName(); $DerivedTableName = $TableName . 'Values'; $PrimaryKeyIdentifiers = []; foreach ($PrimaryKeyColumnNames as $ColumnName) { $PrimaryKeyIdentifiers[] = [$TableName, $ColumnName]; } $QueryBuilder->AppendIdentifier('INSERT INTO #', [$TableName]); $QueryBuilder->AppendIdentifiers('(#)', $ColumnNames, ','); /* * MySQL cannot prepare a statment with an inline table with only a * single row. Bug reported. */ if (count($Rows) === 1) { $this->AppendDataAsInlineRow($QueryBuilder, $Table->GetColumns(), reset($Rows)); } else { $this->AppendDataAsInlineTable($QueryBuilder, $Table->GetColumns(), $DerivedTableName, $Rows); } $this->AppendOnDuplicateKeyUpdate($QueryBuilder, $TableName, $Columns, $PrimaryKeyIdentifiers); }
protected function UpsertRowsQuery(QueryBuilder $QueryBuilder, Table $Table, array $Rows, $ShouldReturnKeyData) { if ($ShouldReturnKeyData) { throw new \Storm\Drivers\Base\Relational\PlatformException('SQLite does not support returning data'); } $Columns = $Table->GetColumns(); $PrimaryKeyColumns = $Table->GetPrimaryKeyColumns(); $ColumnNames = array_keys($Columns); $PrimaryKeyColumnNames = array_keys($PrimaryKeyColumns); $TableName = $Table->GetName(); $DerivedTableName = $TableName . 'Values'; $PrimaryKeyIdentifiers = []; foreach ($PrimaryKeyColumnNames as $ColumnName) { $PrimaryKeyIdentifiers[] = [$TableName, $ColumnName]; } $QueryBuilder->AppendIdentifier('INSERT OR REPLACE INTO #', [$TableName]); $QueryBuilder->AppendIdentifiers('(#)', $ColumnNames, ','); //TODO: Fix unique constraint conflicts $this->AppendDataAsInlineTable($QueryBuilder, $Table->GetColumns(), $DerivedTableName, $Rows); }
protected function DeleteQuery(QueryBuilder $QueryBuilder, Relational\Criterion $Criterion) { $QueryBuilder->AppendIdentifiers('DELETE # FROM # ', array_keys($Criterion->GetTables()), ','); $this->AppendCriterion($QueryBuilder, $Criterion); }
public function PrimaryKey(QueryBuilder $QueryBuilder, Table $Table, Traits\PrimaryKey $Trait) { $QueryBuilder->AppendIdentifiers('PRIMARY KEY (#)', $Trait->GetColumnNames(), ','); }
protected function AppendInsert(QueryBuilder $QueryBuilder, $TableName, $ColumnNames) { $QueryBuilder->AppendIdentifier('INSERT INTO #', [$TableName]); $QueryBuilder->AppendIdentifiers('(#) VALUES ', $ColumnNames, ','); }