001
002package gudusoft.gsqlparser.pp.stmtformatter.builder.comm;
003
004import gudusoft.gsqlparser.pp.processor.ProcessorFactory;
005import gudusoft.gsqlparser.pp.stmtformatter.builder.AbstractStmtFormatterBuilder;
006import gudusoft.gsqlparser.pp.stmtformatter.type.comm.SelectStmtFormatter;
007import gudusoft.gsqlparser.pp.utils.SourceTokenNameConstant;
008
009/**
010 * the select statement builder
011 * 
012 * @author zhoujun
013 * 
014 */
015public class SelectStmtFormatterBuilder extends
016                AbstractStmtFormatterBuilder<SelectStmtFormatter>
017{
018
019        /**
020         * default construnction
021         * 
022         */
023        public SelectStmtFormatterBuilder( )
024        {
025        }
026
027        @Override
028        protected SelectStmtFormatter newInstanceFormatter( )
029        {
030                return new SelectStmtFormatter( );
031        }
032
033        @Override
034        protected void initSpecialProcessorForFormatter(
035                        SelectStmtFormatter formatter )
036        {
037                //
038                formatter.addSpecialProcessor( ProcessorFactory.createCapitalisationProcessor( getOption( ) ) );
039                formatter.addSpecialProcessor( ProcessorFactory.createCombineWhitespaceAndClearReturnProcessor( getOption( ) ) );
040                formatter.addSpecialProcessor( ProcessorFactory.createSelectKeyWordAlignProcessor( getOption( ) ) );
041                formatter.addSpecialProcessor( ProcessorFactory.createCTEProcessor( getOption( ),
042                                getOption( ).cteNewlineBeforeAs ) );
043
044                // build all the item list processors
045                formatter.addSpecialProcessor( ProcessorFactory.createDistinctKeyWordProcessor( getOption( ),
046                                getOption( ).treatDistinctAsVirtualColumn ) );
047                // formatter.addSpecialProcessor(ProcessorFactory.createSelectItemInNewLineProcessor(getOption(),
048                // getOption().selectItemInNewLine));
049                formatter.addItemListProcessor( ProcessorFactory.appendNewLineAfterReverseKeyWordProcessor( getOption( ),
050                                getOption( ).selectItemInNewLine,
051                                SourceTokenNameConstant.SELECT ) );
052                formatter.addItemListProcessor( ProcessorFactory.createColumnlistCommaProcessor( getOption( ),
053                                getOption( ).selectColumnlistComma,
054                                getOption( ).selectColumnlistStyle ) );
055                // formatter.addItemListProcessor(
056                // ProcessorFactory.createAlignAliasProcessor( getOption( ),
057                // getOption( ).alignAliasInSelectList,
058                // getOption( ).selectColumnlistStyle ) );
059
060                formatter.addItemListAlignProcessor( ProcessorFactory.createAlignAliasProcessor( getOption( ),
061                                getOption( ).alignAliasInSelectList,
062                                getOption( ).selectColumnlistStyle ) );
063
064                // build the table clause processors
065                formatter.addTableClauseProcessor( ProcessorFactory.appendNewLineAfterAndBeforeReverseKeyWordProcessor( getOption( ),
066                                getOption( ).fromClauseInNewLine,
067                                SourceTokenNameConstant.FROM,
068                                null ) );
069                formatter.addTableClauseProcessor( ProcessorFactory.createColumnlistCommaProcessor( getOption( ),
070                                getOption( ).selectFromclauseComma,
071                                getOption( ).selectFromclauseStyle ) );
072
073                formatter.addIntoClauseProcessor( ProcessorFactory.appendNewLineAfterAndBeforeReverseKeyWordProcessor( getOption( ),
074                                getOption( ).fromClauseInNewLine,
075                                SourceTokenNameConstant.INTO,
076                                null ) );
077                
078                // build the join clause processors
079                formatter.addFromJoinClauseProcessor( ProcessorFactory.createJoinOnProcessor( getOption( ),
080                                getOption( ).selectFromclauseJoinOnInNewline,
081                                getOption( ).alignJoinWithFromKeyword ) );
082
083                // build the group by clause processors
084                formatter.addGroupByClauseProcessor( ProcessorFactory.appendNewLineAfterAndBeforeReverseKeyWordProcessor( getOption( ),
085                                getOption( ).selectItemInNewLine,
086                                SourceTokenNameConstant.GROUP,
087                                SourceTokenNameConstant.BY ) );
088                formatter.addGroupByClauseProcessor( ProcessorFactory.createColumnlistCommaProcessor( getOption( ),
089                                getOption( ).selectColumnlistComma,
090                                getOption( ).selectColumnlistStyle ) );
091
092                formatter.addHavingClauseProcessor( ProcessorFactory.appendNewLineAfterAndBeforeReverseKeyWordProcessor( getOption( ),
093                                getOption( ).selectItemInNewLine,
094                                SourceTokenNameConstant.HAVING,
095                                null ) );
096
097                // build the order by clause processors
098                formatter.addOrderByClauseProcessor( ProcessorFactory.appendNewLineAfterAndBeforeReverseKeyWordProcessor( getOption( ),
099                                getOption( ).selectItemInNewLine,
100                                SourceTokenNameConstant.ORDER,
101                                SourceTokenNameConstant.BY ) );
102                formatter.addOrderByClauseProcessor( ProcessorFactory.createColumnlistCommaProcessor( getOption( ),
103                                getOption( ).selectColumnlistComma,
104                                getOption( ).selectColumnlistStyle ) );
105
106                // build the where clause processors
107                formatter.addWhereClauseProcessor( ProcessorFactory.createAppendNewLineBeforeReverseKeyWordProcessor( getOption( ),
108                                true,
109                                SourceTokenNameConstant.WHERE ) );
110                formatter.addWhereExpProcessors( ProcessorFactory.createExpressionProcessor( getOption( ),
111                                getOption( ).andOrUnderWhere ) );
112
113                // create the union processor
114                formatter.setUnionProcessor( ProcessorFactory.createUnionProcessor( getOption( ) ) );
115        }
116}