Показать сообщение отдельно
  #1 (permalink)  
Старый 21.11.2015, 19:17
Новичок на форуме
Отправить личное сообщение для Alasdair Посмотреть профиль Найти все сообщения от Alasdair
 
Регистрация: 21.11.2015
Сообщений: 5

Прошу раскритиковать наслойку работы с MySql.
Всем доброго! Начал изучать js и работу с node.js, для осознания заблуждений и неправильного подхода прошу рассмотреть и сказать свое мнение. Очень надеюсь на здоровую критику и пинки в нужном направлении))))) Я еще не закончил его(((

mysql = Use("mysql");
connection = mysql.createConnection({
    user: Cube.db.user,
    password: Cube.db.password,
    database: Cube.db.database,
    host: Cube.db.host
});

Cube.db.connect = true;

ActiveQuery = function(){

    this.db = {};
    this.result = {};
    this.systemErrors = [
        'Не существует такого столбца в таблице: ',
        'Не верные передаваемые данные, надо передавать объект ключ которого название столбца, а значение является значением столбца ({name: \'Djon\'})',
        'Не верные передаваемые данные, надо передавать массив значение которого является названием столбца ([name])',
        ' надо привести к типу:',
        'Надо передать данные'
    ];

    this.findOne = function(data, cols){
        if(this.error({data: data, cols: cols})){
            return false;
        }
        var sql = 'SELECT ';
        var count, step, result = false;
        if(cols == undefined){
            sql += '*';
        }
        else{
            count = Library.count(cols), step = 1;
            for(var col in cols){
                sql += '`'+cols[col]+'`';
                if(count > step){
                    sql += ', ';
                }
                step++;
            }
        }
        sql += ' FROM `'+this.db.name+'` WHERE ';
        count = Library.count(data);
        if(count && data != undefined){
            step = 1;
            for(var e in data){
                sql += e+' = '+data[e];
                if(count > step){
                    sql += ' AND ';
                }
                step++;
            }
        }
        else{
            sql += this.db.idCol+' <> 0';
        }
        sql += ' ORDER BY '+this.db.idCol+' DESC LIMIT 1';
        //this.getQuery(sql);
        console.log(sql);
        //return this.result;
    };

    this.findAll = function(data, cols){
        if(this.error({data: data, cols: cols})){
            return false;
        }
        var sql = 'SELECT ';
        var count, step, result = false;
        if(cols == undefined){
            sql += '*';
        }
        else{
            count = Library.count(cols), step = 1;
            for(var col in cols){
                sql += '`'+cols[col]+'`';
                if(count > step){
                    sql += ', '
                }
                step++;
            }
        }
        sql += ' FROM `'+this.db.name+'` WHERE ';
        count = Library.count(data);
        if(count && data != undefined){
            step = 1;
            for(var e in data){
                sql += e+' = '+data[e];
                if(count > step){
                    sql += ' AND ';
                }
                step++;
            }
        }
        else{
            sql += this.db.idCol+' <> 0';
        }
        //this.getQuery(sql);
        console.log(sql);
    };

    this.update = function(id, data){
        if(this.error({data: id})){
            return false;
        }
        if(this.error({data: data})){
            return false;
        }
        if(id == undefined || !Library.count(id) || data == undefined || !Library.count(data)){
            console.log(this.systemErrors[4]);
            return false;
        }
        var sql = 'UPDATE '+this.db.name+' SET ';
        var count = Library.count(data), step = 1;
        for(var e in data){
            sql += e+'='+data[e];
            if(count > step){
                sql += ', ';
            }
            step++;
        }
        count = Library.count(id);
        step = 1;
        sql += ' WHERE ';
        for(var i in id){
            sql += i+'='+id[i];
            if(count > step){
                sql += ' AND ';
            }
            step++;
        }
        //this.getQuery(sql);
        console.log(sql);
    };

    this.deleteAll = function(data){
        if(data == undefined || !Library.count(data)){
            console.log(this.systemErrors[4]);
            return false;
        }
        if(this.error({data: data})){
            return false;
        }
        var sql = 'DELETE FROM '+this.db.name+' WHERE ';
        var count = Library.count(data), step = 1;
        for(var e in data){
            sql += e+'='+data[e];
            if(count > step){
                sql += ' AND ';
            }
            step++;
        }
        console.log(sql);
    };

    this.findBySql = function(sql){
        console.log(sql);
    };

    this.count = function(data){
        if(this.error({data: data})){
            return false;
        }
        var sql = 'SELECT COUNT(*) FROM '+this.db.name+' ';
        if(data != undefined){
            sql += ' WHERE ';
            var count = Library.count(data), step = 1;
            for(var e in data){
                sql += e+'='+data[e];
                if(count > step){
                    sql += ' AND ';
                }
                step++;
            }
        }
        console.log(sql);
    };

    this.countGroup = function(data){
        if(this.error({count: data})){
            return false;
        }
        var sql = 'SELECT ', partSql = ' WHERE ', colSql = '';
        var count = Library.count(data), step = 1, contrl = false;
        for(var e in data){
            var index = 0;
            sql += e;
            colSql += e;
            if(contrl && Library.count(data[e]) > 1){
                partSql += ' OR ';
            }
            contrl = true;
            for(var k in data[e]){
                partSql += e+'='+data[e][k];
                if(Library.count(data[e]) > index+1){
                    partSql += ' OR ';
                }
                index++;
            }
            if(count > step){
                sql += ', ';
                colSql += ', ';
            }
            step++;
        }
        sql += ', COUNT(*) FROM '+this.db.name+partSql+' GROUP BY '+colSql;
        console.log(sql);
    };

    this.getQuery = function(sql){
        connection.query(sql, function(error, result, fields) {
            console.log(result);
        });
    };

    this.error = function(data){
        result = false;
        for(var e in data){
            switch(e) {
                case 'data':
                    if(data[e] != undefined){
                        if(Object.prototype.toString.call(data[e]) == '[object Array]'){
                            console.log(this.systemErrors[1]);
                            return true;
                        }
                        for(var n in data[e]){
                            if(this.db.cols[n] == undefined){
                                console.log(this.systemErrors[0]+n);
                                return true;
                            }
                            else if(typeof data[e][n] != this.db.cols[n]){
                                console.log(this.db.label[n]+this.systemErrors[3]+' '+this.db.cols[n]);
                                return true;
                            }
                        }
                    }
                    break;
                case 'cols':
                    if(data[e] != undefined){
                        if(Object.prototype.toString.call(data[e]) != '[object Array]'){
                            console.log(this.systemErrors[2]);
                            return true;
                        }
                        for(var n in data[e]){
                            if(this.db.cols[data[e][n]] == undefined){
                                console.log(this.systemErrors[0]+data[e][n]);
                                return true;
                            }
                        }
                    }
                    break;
                case 'count':
                    if(data[e] != undefined){
                        if(Library.count(data[e]) == 0){
                            console.log(this.systemErrors[4]);
                            return true;
                        }
                        if(Object.prototype.toString.call(data[e]) == '[object Array]'){
                            console.log(this.systemErrors[1]);
                            return true;
                        }
                        for(var n in data[e]){
                            if(this.db.cols[n] == undefined){
                                console.log(this.systemErrors[0]+n);
                                return true;
                            }
                            for(var j in data[e][n]){
                                if(typeof data[e][n][j] != this.db.cols[n]){
                                    console.log(this.db.label[n]+this.systemErrors[3]+' '+this.db.cols[n]);
                                    return true;
                                }
                            }
                        }
                    }
                    else{
                        console.log(this.systemErrors[4]);
                        return true;
                    }
                    break;
            }
        }
    };
};
Ответить с цитированием