import { MySQL } from 'src/parser/mysql';
import { readSQL } from 'test/helper';

const mysql = new MySQL();

const features = {
    commit: readSQL(__dirname, 'commit.sql'),
    savePoint: readSQL(__dirname, 'savePoint.sql'),
    lockTable: readSQL(__dirname, 'lockTable.sql'),
    setTransaction: readSQL(__dirname, 'setTransaction.sql'),
    xaTransactions: readSQL(__dirname, 'xaTransactions.sql'),
    replication: readSQL(__dirname, 'replication.sql'),
    prepared: readSQL(__dirname, 'prepared.sql'),
    changeMasterTo: readSQL(__dirname, 'changeMasterTo.sql'),
    changeReplicationFilter: readSQL(__dirname, 'changeReplicationFilter.sql'),
    changeReplicationSource: readSQL(__dirname, 'changeReplicationSource.sql'),
    resetSlaveOrReplica: readSQL(__dirname, 'resetSlaveOrReplica.sql'),
    startSlaveOrReplica: readSQL(__dirname, 'startSlaveOrReplica.sql'),
    stopSlaveOrReplica: readSQL(__dirname, 'stopSlaveOrReplica.sql'),
    groupReplication: readSQL(__dirname, 'groupReplication.sql'),
    utility: readSQL(__dirname, 'utility.sql'),
};

describe('MySQL Transactional and Locking, Replication, Prepared Compound and Utility Syntax Tests', () => {
    Object.keys(features).forEach((key) => {
        features[key].forEach((sql) => {
            it(sql, () => {
                const result = mysql.validate(sql);
                if (result.length) {
                    console.error(result, `\nPlease check sql: ${sql}`);
                }
                expect(result.length).toBe(0);
            });
        });
    });
});
