001package gudusoft.gsqlparser.stmt.teradata.utilities;
002
003import gudusoft.gsqlparser.TSourceToken;
004
005import java.util.HashMap;
006import java.util.Map;
007
008public enum BteqCmdType {
009    AUTOKEYRETRIEVE,
010    BRANCHMSG,
011    COMPILE,
012    CONNECTSTRING,
013    DECIMALDIGITS,
014    DEFAULTS,
015    ECHOREQ,
016    ENCRYPTION,
017    ERRORLEVEL,
018    ERRORONDBSWARNING,
019    ERROROUT,
020    EXIT, QUIT,
021    EXITONDELAY,
022    EXPORT_DATA,
023    EXPORT_DDNAME,
024    EXPORT_INDICDATA,
025    EXPORT_REPORT,
026    EXPORT_DIF,
027    EXPORT_FILE,
028    EXPORT_RESET,
029    EXPORTEJECT,
030    FOLDLINE,
031    FOOTING,
032    FORMAT,
033    FORMCHAR,
034    FULLYEAR,
035    GOTO,
036    HANG,
037    HEADING,
038    RTITLE,
039    HELP_BTEQ,
040    HELP,
041    IF, ENDIF, ELSE, ELSEIF,
042    IMPORT_INDICATA,
043    IMPORT_INDICDATA,
044    IMPORT_REPORT,
045    IMPORT_DATA,
046    IMPORT_VARTEXT,
047    IMPORT_RESET,
048    IMPORT_DDNAME,
049    IMPORT_RECORDLENGTH,
050    IMPORT_FILE,
051    INDICATORMODE,
052    INDICDATA,
053    LABEL,
054    LARGEDATAMODE,
055    LOGMECH,
056    LOGDATA,
057    LOGOFF, LOGON,
058    LOGONPROMPT,
059    MAXERROR,
060    MESSAGEOUT,
061    NOTIFY,
062    NULL,
063    OMIT,
064    OS,
065    PACK,
066    PAGEBREAK,
067    PAGELENGTH,
068    QUIET,
069    RECORDLENGTH,
070    RECORDMODE,
071    REMARK,
072    REPEAT,
073    REPEATSTOP,
074    REPORTALIGN,
075    RETCANCEL,
076    RETLIMIT,
077    RETRY,
078    RUN_FILE, RUN_DD, RUN_DDNAME, RUN_QUIT,
079    SEPARATOR,
080    SESSION_CHARSET,
081    SESSION_RESPBUFLEN,
082    SESSION_SQLFLAG,
083    SESSION_TRANSACTION,
084    SESSION_TRANS,
085    SESSION_TWORESPBUFS,
086    SESSIONS,
087    SHOW,
088    SHOW_CONTROLS, SHOW_CONTROL,
089    SHOW_ERRORMAP,
090    SHOW_VERSIONS, SHOW_VERSION,
091    SIDETITLES,
092    SKIPDOUBLE,
093    SKIPLINE,
094    STATEMENTINDEPENDENCE,
095    SUPPRESS,
096    TDP,
097    TIMEMSG,
098    TIMEOUT,
099    TITLEDASHES,
100    TMSMMSG,
101    TRAILINGLINES,
102    TRANSLATECTRLSTOSPACES,
103    TRIMTRAILINGSPACES,
104    TSO,
105    UNDERLINE,
106    COMMENT, // COMMENT IS NOT A REAL COMMAND, IT IS USED TO REPRESENT LINE START WITH *
107    BT,
108    ET,
109    WIDTH
110    ;
111
112    private static final Map<String, BteqCmdType> bteqCmdLookup = new HashMap<>();
113
114    static {
115        for (BteqCmdType cmd : values()) {
116            String cmdName = cmd.name().replace('_', ' ');
117            if (cmdName.equals("COMMENT")) {
118                continue; // skip this one
119            }
120            bteqCmdLookup.put(cmdName, cmd);
121            // Add SET variant if applicable
122            if (!cmdName.startsWith("SET ") && !cmdName.startsWith("SHOW ") && 
123                !cmdName.startsWith("RUN ") && !cmdName.equals("HELP BTEQ") &&
124                !cmdName.equals("IF") && !cmdName.equals("ENDIF") && 
125                !cmdName.equals("ELSE") && !cmdName.equals("ELSEIF") &&
126                !cmdName.equals("EXIT") && !cmdName.equals("QUIT") &&
127                !cmdName.equals("LOGOFF") && !cmdName.equals("LOGON") &&
128                !cmdName.equals("GOTO") && !cmdName.equals("HANG") &&
129                !cmdName.equals("EXPORT") && !cmdName.equals("IMPORT") &&
130                !cmdName.equals("LABEL") && !cmdName.equals("OS") &&
131                !cmdName.equals("REMARK") && !cmdName.equals("REPEAT") &&
132                !cmdName.equals("SHOW") && !cmdName.equals("TSO")) {
133                bteqCmdLookup.put("SET " + cmdName, cmd);
134            }
135        }
136    }
137
138    public static BteqCmdType searchBteqCmd(String str) {
139        return bteqCmdLookup.get(str.toUpperCase());
140    }
141
142    public static BteqCmdType searchBteqCmd(TSourceToken token) {
143        if (token == null) {
144            return null;
145        }
146        BteqCmdType cmd = searchBteqCmd(token.toString());
147        if (cmd != null) {
148            return cmd;
149        }
150        TSourceToken nextToken = token.nextSolidToken();
151        if (nextToken != null) {
152            cmd = searchBteqCmd(token.toString()+" "+nextToken.toString());
153            //System.out.println("searching: " + token.toString()+" "+nextToken.toString()+" returns: " + cmd);
154            return cmd;
155        }else{
156            return null;
157        }
158    }
159}