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            // For vendors without specific yacc methods, use generic find
037            default:
038                TSqlCmdList cmdList = monolithicCmds.getSqlCmdList(vendor);
039                if (cmdList == null || cmdList.size() == 0) {
040                    return ESqlStatementType.sstunknown;
041                }
042                // Use reflection or direct call to find method
043                // For now, return unknown (will be implemented per vendor)
044                return ESqlStatementType.sstunknown;
045        }
046    }
047
048    @Override
049    public EDbVendor getVendor() {
050        return vendor;
051    }
052
053
054    @Override
055    public TSqlCmdList getSqlCmdList() {
056        return null;//monolithicCmds.getSqlCmdList(vendor);
057    }
058
059    /**
060     * Internal helper for Sybase to find command type.
061     * Called by TSqlCmdsSybase.findCmdUsedByYacc() until Sybase is fully migrated.
062     */
063    public ESqlStatementType findSybaseCmdInternal(TSourceToken token) {
064        return monolithicCmds.findsybasecmd(token);
065    }
066}