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}