예제 #1
0
        public void AddField(string fieldname, object value, FieldType fieldtype, Type keyInitializerType, bool isChanged)
        {
            if (!_selectFields.Contains(fieldname))
            {
                _selectFields.Add(fieldname);
            }

            if (fieldtype == FieldType.KeyField)
            {
                if (value == null)
                {
                    _whereClausel.Add(string.Format("{0} IS NULL", fieldname));
                }
                else
                {
                    SqliteParameter param = DataBaseProvider.GetParameter($"@param{_parameters.Count}", value);
                    _whereClausel.Add($"{fieldname} = {param.ParameterName}");
                    _parameters.Add(param);
                }
            }
            else if (isChanged && (fieldtype == FieldType.WriteableField || fieldtype == FieldType.UpdateableField) && !_setValues.ContainsKey(fieldname))
            {
                if (value == null)
                {
                    _setValues.Add(fieldname, "NULL");
                }
                else
                {
                    SqliteParameter param = DataBaseProvider.GetParameter($"@param{_parameters.Count}", value);
                    _setValues.Add(fieldname, param.ParameterName);
                    _parameters.Add(param);
                }
            }
        }
        private DbParameter AddDbParameter(object value)
        {
            DbParameter returnValue = DataBaseProvider.GetParameter($"@param{_databaseProvider.GetUniqe()}", value);

            _parameters.Add(returnValue);
            return(returnValue);
        }
예제 #3
0
 public void AddField(string fieldname, object value, FieldType fieldtype, Type keyInitializerType, bool isChanged)
 {
     if (fieldtype == FieldType.KeyField)
     {
         SqliteParameter param = DataBaseProvider.GetParameter($"@param{_parameters.Count}", value);
         _whereClausel.Add($"{fieldname} = {param.ParameterName}");
         _parameters.Add(param);
     }
 }
 public SelectCommandBuilder(DataBaseProvider databaseProvider)
 {
     _databaseProvider   = databaseProvider;
     _parameters         = new List <DbParameter>();
     _selectFields       = new List <string>();
     _orderbyExpressions = new List <Tuple <LambdaExpression, bool> >();
     _joins            = new List <Join>();
     _top              = -1;
     _alias            = $"T{_databaseProvider.GetUniqe()}";
     _whereExpressions = new List <LambdaExpression>();
 }
예제 #5
0
        public DbCommand GetDbCommand()
        {
            DbCommand command = DataBaseProvider.GetCommand();

            foreach (SqliteParameter parameter in _parameters)
            {
                command.Parameters.Add(parameter);
            }

            command.CommandText = _whereClausel.Count == 0 ? $"DELETE FROM \"{_tablename}\"" : $"DELETE FROM \"{_tablename}\" WHERE {string.Join(" AND ", _whereClausel.ToArray())}";
            return(command);
        }
        public DbCommand GetDbCommand()
        {
            DbCommand command = DataBaseProvider.GetCommand();

            foreach (SqliteParameter parameter in _parameters)
            {
                command.Parameters.Add(parameter);
            }

            command.CommandText = _insertFields.Count == 0 ?
                                  $"INSERT INTO \"{_tablename}\" DEFAULT VALUES;\r\nSELECT {string.Join(", ", _selectFields.ToArray())} FROM {_tablename} WHERE {string.Join(" AND ", _whereClausel.ToArray())}" :
                                  $"INSERT INTO \"{_tablename}\" ({string.Join(", ", _insertFields.ToArray())}) VALUES ({string.Join(", ", _insertValues.ToArray())});\r\nSELECT {string.Join(", ", _selectFields.ToArray())} FROM \"{_tablename}\" WHERE {string.Join(" AND ", _whereClausel.ToArray())}";

            return(command);
        }
        public void AddField(string fieldname, object value, FieldType fieldtype, Type keyInitializerType, bool isChanged)
        {
            if (!_selectFields.Contains(fieldname))
            {
                _selectFields.Add(fieldname);
            }

            if (_insertFields.Contains(fieldname))
            {
                return;
            }

            if (fieldtype == FieldType.KeyField)
            {
                KeyInitializer keyInitializer = keyInitializerType != null?KeyInitializer.GetInitializer(keyInitializerType) : null;

                if (keyInitializer == null || !keyInitializer.CheckEmpty(value))
                {
                    SqliteParameter param = DataBaseProvider.GetParameter($"@param{_parameters.Count}", value);
                    _insertFields.Add(fieldname);
                    _insertValues.Add(param.ParameterName);
                    _whereClausel.Add(string.Format("{0} = {1}", param.ParameterName, fieldname));
                    _parameters.Add(param);
                }
                else
                {
                    _whereClausel.Add(keyInitializer.GetWhereClause(fieldname, _tablename));
                }
            }
            else if (fieldtype == FieldType.WriteableField || fieldtype == FieldType.InsertableField)
            {
                if (value == null)
                {
                    _insertFields.Add(fieldname);
                    _insertValues.Add("NULL");
                }
                else
                {
                    SqliteParameter param = DataBaseProvider.GetParameter($"@param{_parameters.Count}", value);
                    _insertFields.Add(fieldname);
                    _insertValues.Add(param.ParameterName);
                    _parameters.Add(param);
                }
            }
        }
예제 #8
0
        public DbCommand GetDbCommand()
        {
            string[] setStrings = new string[_setValues.Count];
            int      i          = 0;

            foreach (KeyValuePair <string, string> item in _setValues)
            {
                setStrings[i] = $"{item.Key} = {item.Value}";
                i++;
            }

            DbCommand command = DataBaseProvider.GetCommand();

            foreach (SqliteParameter parameter in _parameters)
            {
                command.Parameters.Add(parameter);
            }

            command.CommandText = $"UPDATE \"{_tablename}\" SET {string.Join(", ", setStrings)} WHERE {string.Join(" AND ", _whereClausel.ToArray())};\r\nSELECT {string.Join(", ", _selectFields.ToArray())} FROM \"{_tablename}\" WHERE {string.Join(" AND ", _whereClausel.ToArray())}";
            return(command);
        }
예제 #9
0
 public SqliteDataBaseInitializer(string connectionString, DataBaseProvider databaseProvider, Func <DbCommand> getCommandFunc) : base(connectionString, databaseProvider, getCommandFunc)
 {
     _databaseProvider = databaseProvider;
     _connectionString = connectionString;
 }
        public DbCommand GetDbCommand()
        {
            if (string.IsNullOrEmpty(_tablename))
            {
                throw new InvalidOperationException("Tablename is not set.");
            }

            StringBuilder stringBuilder = new StringBuilder("SELECT");

            stringBuilder.Append($" {string.Join($", ", _selectFields.Select(x => $"{_alias}.{x} {x}").ToArray())} FROM \"{_tablename}\" {_alias}");

            string whereClause = null;

            if (_whereExpressions.Count == 1)
            {
                whereClause = _databaseProvider.ExpressionParser.ParseExpression(_whereExpressions[0], this);
            }
            else if (_whereExpressions.Count > 1)
            {
                foreach (LambdaExpression expression in _whereExpressions)
                {
                    if (whereClause == null)
                    {
                        whereClause = "(";
                    }
                    else
                    {
                        whereClause += " AND (";
                    }

                    whereClause += _databaseProvider.ExpressionParser.ParseExpression(expression, this) + ")";
                }
            }

            foreach (Join join in _joins)
            {
                stringBuilder.Append(" LEFT OUTER ").Append(join);
            }

            if (!string.IsNullOrWhiteSpace(whereClause))
            {
                stringBuilder.Append(" WHERE ").Append(whereClause);
            }

            if (_orderbyExpressions.Count != 0)
            {
                stringBuilder.Append(" ORDER BY ").Append(string.Join(", ", _orderbyExpressions.Select(
                                                                          exp => exp.Item2 ?
                                                                          _databaseProvider.ExpressionParser.ParseExpression(exp.Item1, this) + " DESC":
                                                                          _databaseProvider.ExpressionParser.ParseExpression(exp.Item1, this)
                                                                          ).ToArray()));
            }

            if (_top > -1)
            {
                stringBuilder.AppendFormat(" LIMIT {0}", _top);
            }

            DbCommand command = DataBaseProvider.GetCommand();

            foreach (SqliteParameter parameter in _parameters)
            {
                command.Parameters.Add(parameter);
            }

            command.CommandText = stringBuilder.ToString();
            return(command);
        }