protected override void ProcessDataType(SQLProcessorAggregator aggregator, ColumnDefinition obj, StringBuilder builder) { if (obj.AutoGenerationPolicy.HasValue) { // PostgreSQL can't handle the ALWAYS strategy if (AutoGenerationPolicy.ByDefault == obj.AutoGenerationPolicy.Value) { // Don't produce default data type if auto generated String dtStr; if (this._dataTypeSerialNames.TryGetValue(obj.DataType.GetType(), out dtStr)) { builder.Append(dtStr); } else { throw new NotSupportedException("Unsupported column data type " + obj.DataType + " for auto-generated column."); } } else { throw new NotSupportedException("Unsupported auto generation policy: " + obj.AutoGenerationPolicy.Value + "."); } } else { base.ProcessDataType(aggregator, obj, builder); } }
protected override void BeforeTableName(SQLProcessorAggregator aggregator, DropTableOrViewStatement obj, StringBuilder builder) { if (((PgSQLDropTableOrViewStatement)obj).UseIfExists) { builder.Append("IF EXISTS "); } }
protected override void ProcessOffsetAndLimit(SQLProcessorAggregator aggregator, NonBooleanExpression offset, NonBooleanExpression limit, StringBuilder builder) { if (((MySQLVendor)aggregator.SQLVendor).LegacyLimitSyntax) { // LIMIT X(,Y) builder.Append(SQLConstants.NEWLINE + MYSQL_LIMIT_PREFIX + SQLConstants.TOKEN_SEPARATOR); if (offset != null) { aggregator.Process(offset, builder); builder.Append(SQLConstants.COMMA); } if (limit != null) { aggregator.Process(limit, builder); } else if (offset != null) { builder.Append(Int64.MaxValue); } } else { if (limit == null) { limit = aggregator.SQLVendor.CommonFactory.I64(Int64.MaxValue); } base.ProcessOffsetAndLimit(aggregator, offset, limit, builder); } }
protected override void DoProcess(SQLProcessorAggregator aggregator, InsertStatement obj, StringBuilder builder) { base.DoProcess(aggregator, obj, builder); var returning = ((PgSQLInsertStatement)obj).ReturningClause; if (returning != null) { builder.Append(SQLConstants.NEWLINE + "RETURNING "); if (returning is AsteriskSelect) { builder.Append(SQLConstants.ASTERISK); } else { ColumnReferencesProcessor.DoProcessSelectColumnsStatic(aggregator, ((ColumnReferences)returning), builder); } } }
static MySQLProcessors() { var processors = SQLProcessorAggregator.GetDefaultProcessorsCopy(); // MySQL doesn't understand schemas processors[typeof(TableNameDirectImpl)] = new MySQLTableNameDirectProcessor(); processors[typeof(TableNameFunctionImpl)] = new MySQLTableNameFunctionProcessor(); processors[typeof(SchemaDefinitionImpl)] = new MySQLSchemaDefinitionProcessor(); processors[typeof(DropSchemaStatementImpl)] = new NoOpProcessor(); // MySQL has custom way of handling auto generation syntax of columns processors[typeof(ColumnDefinitionImpl)] = new MySQLColumnDefinitionProcessor(); // MySQL has different syntax for OFFSET/FETCH processors[typeof(QuerySpecificationImpl)] = new MySQLQuerySpecificationProcessor(); DEFAULT_PROCESSORS = processors; }
static PgSQLProcessors() { var processors = SQLProcessorAggregator.GetDefaultProcessorsCopy(); // Override default processor for date-time processors[typeof(TimestampLiteralImpl)] = new PgSQLTimestampLiteralProcessor(); // Override default processor for column definition processors[typeof(ColumnDefinitionImpl)] = new PgSQLColumnDefinitionProcessor(); // Override default processor for regexp predicates processors[typeof(RegexpPredicateImpl)] = new BinaryPredicateProcessor("~", "!~"); // Override default processor for query specification processors[typeof(QuerySpecificationImpl)] = new PgSQLQuerySpecificationProcessor(); // Override default processor for table definition by adding support for table commit action var tableCommitActions = TableDefinitionProcessor.NewCopyOfDefaultCommitActions(); tableCommitActions.Add((TableCommitAction)PgSQLTableCommitAction.Drop, "DROP"); processors[typeof(TableDefinitionImpl)] = new TableDefinitionProcessor(null, tableCommitActions); // Add support for TEXT datatype processors.Add(typeof(SQLDTTextImpl), new ConstantProcessor("TEXT")); // Add IF EXISTS functionality to DROP TABLE/VIEW statements processors.Remove(typeof(DropTableOrViewStatementImpl)); processors.Add(typeof(PgSQLDropTableOrViewStatementImpl), new PgSQLDropTableOrViewStatementProcessor()); // Add support for PgSQL-specific INSERT statement RETURNING clause processors.Remove(typeof(InsertStatementImpl)); processors.Add(typeof(PgSQLInsertStatementImpl), new PgSQLInsertStatementProcessor()); // Add support for column name list to appear as non-boolean expression (e.g. within where-clause) processors.Add(typeof(ColumnNameListExpressionImpl), new ColumnNamesProcessor()); // Add support for VALUES clause to be value expression (e.g. within where-clause) processors.Add(typeof(ValuesExpressionImpl), new ValuesExpressionProcessor()); DEFAULT_PROCESSORS = processors; }
protected override void DoProcess(SQLProcessorAggregator aggregator, ValuesExpression obj, StringBuilder builder) { ColumnSourceByValuesProcessor.ProcessValues(aggregator, obj, builder); }
protected override void DoProcess(SQLProcessorAggregator aggregator, SchemaDefinition obj, StringBuilder builder) { // Ignore actual schema, process other elements this.ProcessSchemaElements(aggregator, obj, builder); }
protected override void DoProcess(SQLProcessorAggregator aggregator, TableNameFunction obj, StringBuilder builder) { // MySQL does not understand schema-qualified table names aggregator.Process(obj.Function, builder); }
protected override void DoProcess(SQLProcessorAggregator aggregator, TableNameDirect obj, StringBuilder builder) { // MySQL does not understand schema-qualified table names builder.Append(obj.TableName); }
protected override void DoProcessNonNull(SQLProcessorAggregator aggregator, TimestampLiteral obj, StringBuilder builder) { builder.Append("timestamp "); base.DoProcessNonNull(aggregator, obj, builder); }