001package gudusoft.gsqlparser.sqlcmds;
002
003import gudusoft.gsqlparser.*;
004
005/**
006 * Adapter class that wraps the monolithic TSqlCmds for gradual migration.
007 * This allows us to migrate vendors one at a time while maintaining compatibility.
008 *
009 * @since 3.1.0.9
010 */
011public class TSqlCmdsAdapter implements ISqlCmds {
012
013    private final EDbVendor vendor;
014    private final TSqlCmds monolithicCmds;
015
016
017    public TSqlCmdsAdapter(EDbVendor vendor) {
018        this.vendor = vendor;
019        this.monolithicCmds = new TSqlCmds();
020    }
021
022    @Override
023    public TCustomSqlStatement issql(TSourceToken token, EFindSqlStateType state, TCustomSqlStatement currentStatement) {
024        // Delegate to monolithic implementation with vendor parameter
025        return monolithicCmds.issql(token, vendor, state, currentStatement);
026    }
027
028    @Override
029    public ESqlStatementType getStatementTypeForToken(TSourceToken token) {
030        // Delegate to vendor-specific method based on vendor type
031        switch (vendor) {
032            case dbvmssql:
033                return monolithicCmds.findmssqlcmdusedbyyacc(token);
034            case dbvsybase:
035                return monolithicCmds.findsybasecmdusedbyyacc(token);
036            case dbvsybasease:
037                return monolithicCmds.findsybaseasecmdusedbyyacc(token);
038            case dbvsqlanywhere:
039                return monolithicCmds.findsqlanywherecmdusedbyyacc(token);
040            case dbvsybaseiq:
041                return monolithicCmds.findsybaseiqcmdusedbyyacc(token);
042            // For vendors without specific yacc methods, use generic find
043            default:
044                TSqlCmdList cmdList = monolithicCmds.getSqlCmdList(vendor);
045                if (cmdList == null || cmdList.size() == 0) {
046                    return ESqlStatementType.sstunknown;
047                }
048                // Use reflection or direct call to find method
049                // For now, return unknown (will be implemented per vendor)
050                return ESqlStatementType.sstunknown;
051        }
052    }
053
054    @Override
055    public EDbVendor getVendor() {
056        return vendor;
057    }
058
059
060    @Override
061    public TSqlCmdList getSqlCmdList() {
062        return null;//monolithicCmds.getSqlCmdList(vendor);
063    }
064
065    /**
066     * Internal helper for Sybase to find command type.
067     * Called by TSqlCmdsSybase.findCmdUsedByYacc() until Sybase is fully migrated.
068     */
069    public ESqlStatementType findSybaseCmdInternal(TSourceToken token) {
070        return monolithicCmds.findsybasecmd(token);
071    }
072}