public SdbRequest BuildDelete()
        {
            string sql = $"delete from {_fieldQuotes}{_tableName}{_fieldQuotes} ";

            if (_whereBuilder != null)
            {
                sql += WhereBuilder.Build();
            }
            else
            {
                throw new ArgumentException("WHERE condition is mandatory, you can override with 1=1");
            }

            if (_appendSql != null)
            {
                sql += _appendSql;
            }

            SdbRequest dbRequest = SdbRequest.Of(
                SdbRequest.CmdType.Command,
                sql);

            dbRequest.AddParamRange(WhereBuilder.GetParameters());

            return(dbRequest);
        }
        public SdbRequest BuildInsert()
        {
            string sqlf = "";
            string sqlv = "";

            foreach (var kv in _insertUpdateValues)
            {
                sqlf += _fieldQuotes + kv.Key + _fieldQuotes + ",";
                sqlv += "@" + kv.Key + ",";
            }

            sqlf = sqlf.Remove(sqlf.Length - 1);
            sqlv = sqlv.Remove(sqlv.Length - 1);



            string sql = $"insert into {_fieldQuotes}{_tableName}{_fieldQuotes} ({sqlf}) values ({sqlv}) ";

            if (_appendSql != null)
            {
                sql += _appendSql;
            }


            SdbRequest dbRequest = SdbRequest.Of(
                SdbRequest.CmdType.CommandWithIdentity,
                sql,
                null,
                _insertUpdateValues);

            return(dbRequest);
        }
        public SdbRequest BuildUpdate(string customFieldsUpdate = "")
        {
            StringBuilder sql = new StringBuilder($"update {_fieldQuotes}{_tableName}{_fieldQuotes} set ");

            if (!string.IsNullOrEmpty(customFieldsUpdate))
            {
                sql.Append(customFieldsUpdate);
            }

            foreach (var kv in _insertUpdateValues)
            {
                sql.Append(_fieldQuotes + kv.Key + _fieldQuotes + "=@" + kv.Key + ",");
            }

            sql.Remove(sql.Length - 1, 1);


            if (_whereBuilder != null)
            {
                sql.Append(WhereBuilder.Build());
            }
            else
            {
                throw new ArgumentException("WHERE condition is mandatory, you can override with 1=1");
            }

            if (_appendSql != null)
            {
                sql.Append(_appendSql);
            }
            SdbRequest dbRequest = SdbRequest.Of(
                SdbRequest.CmdType.Command,
                sql.ToString(),
                null,
                _insertUpdateValues);

            dbRequest.AddParamRange(WhereBuilder.GetParameters());

            return(dbRequest);
        }
        public SdbRequest BuildSelect()
        {
            string sql = "select ";


            if (_selectFields == null)
            {
                //TODO: shouldn't this case be "select * from table" ?
                throw new ArgumentException("You must inform some select fields before building the SQL");
            }

            sql += _fieldQuotes + string.Join($"{_fieldQuotes},{_fieldQuotes}", _selectFields) + _fieldQuotes;
            sql += $" from {_fieldQuotes}{_tableName}{_fieldQuotes}";

            if (_whereBuilder != null)
            {
                sql += WhereBuilder.Build();
            }

            if (!string.IsNullOrEmpty(_orderCriteria))
            {
                sql += " order by " + _orderCriteria;
            }
            if (_appendSql != null)
            {
                sql += _appendSql;
            }
            SdbRequest dbRequest = SdbRequest.Of(
                _isScalar ? SdbRequest.CmdType.SingleResult : SdbRequest.CmdType.Query,
                sql,
                this._selectFields.ToArray()
                );

            if (_whereBuilder != null)
            {
                dbRequest.AddParamRange(WhereBuilder.GetParameters());
            }

            return(dbRequest);
        }