Пример #1
0
 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);
     }
 }
Пример #2
0
 protected override void BeforeTableName(SQLProcessorAggregator aggregator, DropTableOrViewStatement obj, StringBuilder builder)
 {
     if (((PgSQLDropTableOrViewStatement)obj).UseIfExists)
     {
         builder.Append("IF EXISTS ");
     }
 }
Пример #3
0
 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);
     }
 }
Пример #4
0
        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);
                }
            }
        }
Пример #5
0
        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;
        }
Пример #6
0
        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;
        }
Пример #7
0
 protected override void DoProcess(SQLProcessorAggregator aggregator, ValuesExpression obj, StringBuilder builder)
 {
     ColumnSourceByValuesProcessor.ProcessValues(aggregator, obj, builder);
 }
Пример #8
0
 protected override void DoProcess(SQLProcessorAggregator aggregator, SchemaDefinition obj, StringBuilder builder)
 {
     // Ignore actual schema, process other elements
     this.ProcessSchemaElements(aggregator, obj, builder);
 }
Пример #9
0
 protected override void DoProcess(SQLProcessorAggregator aggregator, TableNameFunction obj, StringBuilder builder)
 {
     // MySQL does not understand schema-qualified table names
     aggregator.Process(obj.Function, builder);
 }
Пример #10
0
 protected override void DoProcess(SQLProcessorAggregator aggregator, TableNameDirect obj, StringBuilder builder)
 {
     // MySQL does not understand schema-qualified table names
     builder.Append(obj.TableName);
 }
Пример #11
0
 protected override void DoProcessNonNull(SQLProcessorAggregator aggregator, TimestampLiteral obj, StringBuilder builder)
 {
     builder.Append("timestamp ");
     base.DoProcessNonNull(aggregator, obj, builder);
 }