import { SparkSQL } from '../../../filters';
import { readSQL } from '../../../helper';

const parser = new SparkSQL();

const features = {
    selectAggregateFn: readSQL(__dirname, 'selectAggregateFn.sql'),
    selectCase: readSQL(__dirname, 'selectCase.sql'),
    selectCET: readSQL(__dirname, 'selectCET.sql'),
    selectWindowFn: readSQL(__dirname, 'selectWindowFn.sql'),
    selectWhere: readSQL(__dirname, 'selectWhere.sql'),
    selectUnPivot: readSQL(__dirname, 'selectUnPivot.sql'),
    selectTVF: readSQL(__dirname, 'selectTVF.sql'),
    selectTransform: readSQL(__dirname, 'selectTransform.sql'),
    selectTableSample: readSQL(__dirname, 'selectTableSample.sql'),
    selectSortBy: readSQL(__dirname, 'selectSortBy.sql'),
    selectPivot: readSQL(__dirname, 'selectPivot.sql'),
    selectOrderBy: readSQL(__dirname, 'selectOrderBy.sql'),
    selectOffset: readSQL(__dirname, 'selectOffset.sql'),
    selectLimit: readSQL(__dirname, 'selectLimit.sql'),
    selectLike: readSQL(__dirname, 'selectLike.sql'),
    selectLateralView: readSQL(__dirname, 'selectLateralView.sql'),
    selectLateralSubQuery: readSQL(__dirname, 'selectLateralSubQuery.sql'),
    selectJoin: readSQL(__dirname, 'selectJoin.sql'),
    selectInlineTable: readSQL(__dirname, 'selectInlineTable.sql'),
    selectHiving: readSQL(__dirname, 'selectHiving.sql'),
    selectHint: readSQL(__dirname, 'selectHint.sql'),
    selectGroupBy: readSQL(__dirname, 'selectGroupBy.sql'),
    selectFile: readSQL(__dirname, 'selectFile.sql'),
    selectExplain: readSQL(__dirname, 'selectExplain.sql'),
    selectDistributeBy: readSQL(__dirname, 'selectDistributeBy.sql'),
    selectClusterBy: readSQL(__dirname, 'selectClusterBy.sql'),
};
describe('Spark Select Syntax Tests', () => {
    features.selectAggregateFn.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectCase.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectCET.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectWindowFn.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectWhere.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectUnPivot.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectTVF.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectTransform.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectTableSample.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectSortBy.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectPivot.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectOrderBy.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectOffset.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectLimit.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectLike.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectLateralView.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectLateralSubQuery.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectJoin.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectInlineTable.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectHiving.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectHint.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectGroupBy.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectFile.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectExplain.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectDistributeBy.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
    features.selectClusterBy.forEach((itemSql) => {
        it(itemSql, () => {
            expect(parser.validate(itemSql).length).toBe(0);
        });
    });
});
