public bool Execute() { DbQueryBuilder builder = _subQuery.Build(_query.DataSource, 0, false); StringBuilder sb = new StringBuilder(); sb.Append("INSERT INTO "); sb.Append(_query.Provider.EscapeName(DbTable.GetTableName <T>())); sb.Append(' '); sb.Append(GetNames()); sb.Append(builder.Sql); sb.Append(';'); return(DbTable.InsertImpl(_query.DataSource, sb.ToString(), builder.Parameters)); }
DbQueryBuilder IDbUpdateQuery.Build(DataSource ds, ref int count) { DbQueryBuilder builder = _query.Build(ds, ref count); DbQueryBuilder subBuilder = _subQuery.Build(ds, 0, false); builder.Append('('); builder.Append(subBuilder.Sql); builder.Append(')'); builder.Append(subBuilder.Parameters); return(builder); }
internal DbQueryBuilder Build(DataSource ds) { if (_type == DbWhereType.Unkown) { throw new ArgumentException(); } switch (_type) { case DbWhereType.Default: { return(new DbQueryBuilder("1=1", null)); } case DbWhereType.Equal: { if (_value == null) { return(new DbQueryBuilder(string.Concat(GetName(ds), " IS NULL"), null)); } DataParameter p = GetParameter(ds); return(new DbQueryBuilder(string.Concat(GetName(ds), '=', p.GetParameterName()), p)); } case DbWhereType.NotEqual: { if (_value == null) { return(new DbQueryBuilder(string.Concat("NOT ", GetName(ds), " IS NULL"), null)); } DataParameter p = GetParameter(ds); return(new DbQueryBuilder(string.Concat(GetName(ds), "<>", p.GetParameterName()), p)); } case DbWhereType.GreaterThan: { if (_value == null) { throw new ArgumentNullException(); } DataParameter p = GetParameter(ds); return(new DbQueryBuilder(string.Concat(GetName(ds), '>', p.GetParameterName()), p)); } case DbWhereType.GreaterThanOrEqual: { if (_value == null) { throw new ArgumentNullException(); } DataParameter p = GetParameter(ds); return(new DbQueryBuilder(string.Concat(GetName(ds), ">=", p.GetParameterName()), p)); } case DbWhereType.LessThan: { if (_value == null) { throw new ArgumentNullException(); } DataParameter p = GetParameter(ds); return(new DbQueryBuilder(string.Concat(GetName(ds), '<', p.GetParameterName()), p)); } case DbWhereType.LessThanOrEqual: { if (_value == null) { throw new ArgumentNullException(); } DataParameter p = GetParameter(ds); return(new DbQueryBuilder(string.Concat(GetName(ds), "<=", p.GetParameterName()), p)); } case DbWhereType.Like: { if (_value == null) { throw new ArgumentNullException(); } DataParameter p = GetParameter(ds, string.Concat('%', Convert.ToString(_value), '%')); return(new DbQueryBuilder(string.Concat(GetName(ds), " LIKE ", p.GetParameterName()), p)); } case DbWhereType.LikeBegin: { if (_value == null) { throw new ArgumentNullException(); } DataParameter p = GetParameter(ds, string.Concat(Convert.ToString(_value), '%')); return(new DbQueryBuilder(string.Concat(GetName(ds), " LIKE ", p.GetParameterName()), p)); } case DbWhereType.LikeEnd: { if (_value == null) { throw new ArgumentNullException(); } DataParameter p = GetParameter(ds, string.Concat('%', Convert.ToString(_value))); return(new DbQueryBuilder(string.Concat(GetName(ds), " LIKE ", p.GetParameterName()), p)); } case DbWhereType.In: { if (_value == null) { throw new ArgumentNullException(); } IEnumerable e = _value as IEnumerable; if (e != null) { DataParameter p; List <string> vs = new List <string>(); List <DataParameter> ps = new List <DataParameter>(); IEnumerator array = e.GetEnumerator(); while (array.MoveNext()) { p = GetParameter(ds, array.Current); vs.Add(p.GetParameterName()); ps.Add(p); } return(new DbQueryBuilder(string.Concat(GetName(ds), " IN (", string.Join(",", vs.ToArray()), ')'), ps.ToArray())); } IDbSubQuery <DbWhere> q = _value as IDbSubQuery <DbWhere>; if (q != null) { DbQueryBuilder builder = q.Build(ds, 0, false); return(new DbQueryBuilder(string.Concat(GetName(ds), " IN (", builder.Sql, ')'), builder.Parameters)); } throw new NotSupportedException(); } } throw new NotSupportedException(); }