
/*=============================================================================================
	author:ZhaoJun
	version:1.2
	email:2732810281@qq.com
=============================================================================================*/


//严格模式
/*-------------------------------------------------------------------------------------------*/	
'use strict';
/*-------------------------------------------------------------------------------------------*/
    

// 测试操作
/*-------------------------------------------------------------------------------------------*/	
    class sql 
    {

        static comMake(obj)
        {
            if(obj && (typeof obj == 'string'))return obj
            let arr=[]
            for (const key in obj) 
            {
                if(Array.isArray(obj[key]))
                {
                    arr=[...arr,...obj[key]]
                }
                else
                {
                    arr.push(obj[key])
                }
            }
            return arr
        }

        static arr(param)
        {
            if(param)
            {
                let arr=sql.comMake(param)
                if(!Array.isArray(arr))return arr
                if(arr.length===0)
                {
                    param='*'
                }
                else
                {
                    param=arr.join(',') 
                }
            }
            else
            {
                param='*'
            }
            return param
        }

        static async select(param,con)
        {
            return $Sys.orm.descript(param.descript)
            .table(param.table)
            .db(param.db)
            .key(sql.arr(param.key))
            .where(param.where)
            .group(param.group)
            .order(param.order,param.orderNext)
            .page(param.page,param.pageNext)
            .select(con)
        }

        static async selectOne(param,con)
        {
            let result=await sql.select(param,con)
            if(result.length)return result[0]
            else return 0
        }

        static async update(param,con)
        {
            return $Sys.orm.descript(param.descript)
            .table(param.table)
            .db(param.db)
            .field(param.field)
            .where(param.where)
            .group(param.group)
            .order(param.order,param.orderNext)
            .update(con)
        }

        static async delete(param,con)
        {
            return $Sys.orm.descript(param.descript)
            .table(param.table)
            .db(param.db)
            .where(param.where)
            .tableDelete(param.tableDelete)
            .group(param.group)
            .order(param.order,param.orderNext)
            .delete(con)
        }

        static async insert(param,con)
        {
            return $Sys.orm.descript(param.descript)
            .table(param.table)
            .db(param.db)
            .field(param.field)
            .insert(con)
        } 

        static async insertUpdate(param,con)
        {   
            return $Sys.orm.descript(param.descript)
            .table(param.table)
            .db(param.db)
            .field(param.field)
            .insertUpdate(con)
        }

    }
/*-------------------------------------------------------------------------------------------*/    
module.exports=sql;