示例#1
0
 private void RemoveFromSelect(EntityProperty property)
 {
     if (SelectFields.Contains(property))
     {
         SelectFields.Remove(property);
     }
 }
示例#2
0
文件: Select.cs 项目: wj60387/hubble
        override public void Finish()
        {
            foreach (object obj in SyntaxList)
            {
                if (obj is SelectField)
                {
                    SelectField selectField = obj as SelectField;

                    if (selectField.BetweenRecord)
                    {
                        this.Begin = selectField.Begin;
                        this.End   = selectField.End;
                    }

                    SelectFields.Add(selectField);
                }
                else if (obj is SelectFrom)
                {
                    SelectFroms.Add(obj as SelectFrom);
                }
                else if (obj is OrderBy)
                {
                    OrderBys.Add(obj as OrderBy);
                }
                else if (obj is Where)
                {
                    Where = obj as Where;
                }
            }
        }
示例#3
0
 /// <summary>
 /// 清除
 /// </summary>
 public void Clear()
 {
     SelectFields.Clear();
     Sql.Clear();
     DbParams.Clear();
     _dicTableName.Clear();
     _queueEnglishWords = new Queue <string>(S_listEnglishWords);
 }
示例#4
0
 private void Clear()
 {
     SqlBuilder.Clear();
     JoinRelations.Clear();
     WhereClause.Clear();
     Parameters.Clear();
     OrderByFields.Clear();
     GroupByFields.Clear();
     SelectFields.Clear();
 }
示例#5
0
        private EntityProperty GetMemberByName(string memberName)
        {
            var property = SelectFields.FirstOrDefault(p => p.Property.Equals(memberName));

            if (property != null)
            {
                return(property);
            }

            property = InsertFields.FirstOrDefault(p => p.Property.Equals(memberName));

            return(property ?? UpdateFields.FirstOrDefault(p => p.Property.Equals(memberName)));
        }
        protected override IAsyncResult BeginExecute(AsyncCodeActivityContext context,
                                                     AsyncCallback callback, object state)
        {
            var currentScope = context.GetValue(Scope);

            var asyncExecute = new AsyncExecuteWMIDelegate(ExecuteWMI);

            context.UserState = asyncExecute;

            _selectFields = SelectFields.Get(context);
            HideExc       = HideException.Get(context);

            return(asyncExecute.BeginInvoke(Target, Where, currentScope, callback, state));
        }
示例#7
0
        /// <summary>
        /// 获取选择动作
        /// </summary>
        /// <returns></returns>
        private string GetSelectVerb()
        {
            string selectFields;

            if (SelectFields.IsEmpty())
            {
                selectFields = "*";
            }
            else
            {
                selectFields = string.Join(Chars.逗号, SelectFields);
            }

            return($"select {selectFields} from");
        }
示例#8
0
        /// <summary>
        /// 添加查询
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="select"></param>
        /// <returns></returns>
        public JoinQuery Fields <TEntity>(Expression <Func <TEntity, dynamic> > select = null)
        {
            EntityInfo entityInfo = Caches.EntityInfoCache.Get(typeof(TEntity));

            if (select == null)
            {
                SelectFields.AppendFormat("{0},", entityInfo.SelectFields);
            }
            else
            {
                SqlVisitor visitor = new SqlVisitor(DbContext.DataBase.DBType, callIndex++, WithAlias);
                string     fields  = visitor.Translate(select);
                SelectFields.Append(fields);
                Parameters.AddRange(visitor.Parameters);
            }
            return(this);
        }
示例#9
0
        private void InitQRCode()
        {
            if (SelectFields != null && SelectFields.Count > 0)
            {
                foreach (string item in lstFields.ItemsSource as List <string> )
                {
                    string field = item.Replace(" ", "");
                    if (SelectFields.Contains(field))
                    {
                        lstFields.SelectedItems.Add(item);
                    }
                }

                ImageSourceConverter imageSourceConverter = new ImageSourceConverter();
                imgQRcode.Source = (ImageSource)imageSourceConverter.ConvertFrom(QRImageSource);
            }
        }
示例#10
0
        private void Add(EntityProperty property)
        {
            if (property.IsKey)
            {
                KeyField = property;
            }

            if (property.IsSelectable)
            {
                SelectFields.Add(property);
            }

            if (property.IsInsertable)
            {
                InsertFields.Add(property);
            }

            if (property.IsUpdatable)
            {
                UpdateFields.Add(property);
            }
        }
示例#11
0
        /// <summary>
        /// Returns the Statement for the <see cref="SelectDbOperation"/>.
        /// </summary>
        /// <returns>A string containing the select statement</returns>
        public override string GetStatement()
        {
            // Make sure it's ok to run the statement
            this.PreStatementValidation();

            // For performance issues, use the String Builder Class
            StringBuilder sbStatement = new StringBuilder();

            #region Select

            // Display Fields
            StringBuilder sbSelect = new StringBuilder("SELECT ");

            if (Distinct)
            {
                sbSelect.Append("DISTINCT ");
            }

            // Check all Non-Aggregate Fields
            if (SelectFields.Count == 0)
            {
                // Select All Fields
                sbSelect.Append('*');
                sbSelect.AppendLine();
            }
            else
            {
                // For formatting purposes, add a line right after the select
                sbSelect.AppendLine();

                // Select Specific Fields
                sbSelect.AppendLine(String.Join(",\r\n", from field in SelectFields
                                                select String.Concat(String.Empty.PadLeft(7, ' '),
                                                                     field.Type == FieldTypes.Display ?
                                                                     Dialect.FormatField((DisplayField)field) : Dialect.FormatField((AggregateField)field))));
            }

            #endregion Select

            #region Select Aggregates

            //// Check all Aggregate Fields
            //if (SelectFields.Count(field => field.Type == FieldTypes.Aggregate) > 0)
            //{
            //    sbSelect.AppendLine(String.Join(",\r\n", from field in SelectFields
            //                                             where field.Type == FieldTypes.Aggregate
            //                                             select String.Concat(String.Empty.PadLeft(7, ' '), Dialect.FormatField((AggregateField)field))));
            //}

            #endregion Select Aggregates

            #region From

            // From Statement
            sbSelect.Append("  FROM ");

            if (base.Tables == null)
            {
                throw new NullReferenceException($"Tables are not defined for the {nameof(SelectDbOperation)}.");
            }
            if (base.Tables.Count == 0)
            {
                throw new Exception($"There are no tables assigned for the {nameof(SelectDbOperation)}.");
            }

            if (base.Tables.Count == 1)
            {
                // Append Single Table
                sbSelect.AppendLine(base.Dialect.FormatTable(base.Tables[0]));
            }
            else
            {
                // Append Multiple Tables Separated by a Comma
                sbSelect.AppendLine();
                sbSelect.AppendLine(String.Join(",\r\n", from tbl in base.Tables
                                                select String.Concat(String.Empty.PadLeft(7, ' '), Dialect.FormatTable(tbl))));
            }

            #endregion From

            #region Joins

            //TODO: Implement SelectDbOperation -> Joins

            #endregion Joins

            #region Where

            //TODO: Implement SelectDbOperation -> Where

            // Add Filters, if needed
            if (Where?.Count > 0)
            {
                sbSelect.AppendLine(" WHERE ");
            }

            #endregion Where

            #region Group By

            // Group By Fields
            if (GroupBy)
            {
                sbSelect.AppendLine("GROUP BY");

                if (SelectFields?.Count(field => field.Type == FieldTypes.Display) > 0)
                {
                    // Add all display fields but make sure to not have the alternate name on it
                    sbSelect.AppendLine(String.Join(",\r\n", from field in SelectFields
                                                    where field.Type == FieldTypes.Display
                                                    select String.Concat(String.Empty.PadLeft(9, ' '), Dialect.FormatField(new DisplayField(field.Name, field.TableAlias)))));
                }
            }

            #endregion Group By

            #region Having

            //TODO: Implement SelectDbOperation -> Having

            #endregion Having

            // Return the Final Statement
            return(sbSelect.ToString());
        }
示例#12
0
        public FluentQuery Select(params object[] fields)
        {
            SelectFields.AddRange(fields);

            return(this);
        }
示例#13
0
        /// <summary>
        /// 多表连查分页
        /// </summary>
        /// <typeparam name="TModel"></typeparam>
        /// <param name="page"></param>
        /// <returns></returns>
        public PageDataSource <TModel> GetPage <TModel>(PageFilter page)
        {
            List <JoinRelation> tables = new List <JoinRelation>();

            SqlBuilder.AppendFormat(" SELECT {0} FROM {1}", SelectFields.ToString().TrimEnd(','), JoinRelations[0].LeftTable);
            if (WithAlias)
            {
                SqlBuilder.AppendFormat(" AS {0}", JoinRelations[0].LeftTableAlias);
            }
            foreach (JoinRelation j in JoinRelations)
            {
                if (j.JoinType == JoinType.Outer)
                {
                    SqlBuilder.Append(" LEFT OUTER JOIN ");
                }
                else
                {
                    SqlBuilder.Append(" INNER JOIN ");
                }
                if (WithAlias)
                {
                    if (tables.Count(m => m.LeftTableAlias == j.RightTableAlias || m.RightTableAlias == j.RightTableAlias) == 0)
                    {
                        SqlBuilder.AppendFormat("{0} AS {1}", j.RightTable, j.RightTableAlias);
                        tables.Add(j);
                    }
                    else
                    {
                        SqlBuilder.AppendFormat("{0} AS {1}", j.LeftTable, j.LeftTableAlias);
                        tables.Add(j);
                    }
                }
                else
                {
                    if (tables.Count(m => m.LeftTable == j.RightTable || m.RightTable == j.RightTable) == 0)
                    {
                        SqlBuilder.Append(j.RightTable);
                        tables.Add(j);
                    }
                    else
                    {
                        SqlBuilder.Append(j.LeftTable);
                        tables.Add(j);
                    }
                }
                SqlBuilder.AppendFormat(" ON {0}", j.OnSql.TrimEnd("AND".ToCharArray()));
            }
            if (WhereClause.Length > 0)
            {
                SqlBuilder.AppendFormat(" WHERE {0}", WhereClause.ToString().Trim().TrimEnd("AND".ToCharArray()));
            }
            if (GroupByFields.Length > 0)
            {
                SqlBuilder.AppendFormat(" GROUP BY {0}", GroupByFields.ToString().Trim().TrimEnd(','));
            }
            if (OrderByFields.Length > 0)
            {
                page.OrderText = OrderByFields.ToString().Trim().TrimEnd(',');
            }
            //开始组装sql
            //开始组装sql
            PageDataSource <TModel> result = DbContext.GetPage <TModel>(SqlBuilder.ToString(), page, Parameters.ToArray());

            if (this.IsAutoDisposeDbContext)
            {
                DbContext.Dispose();
            }
            return(result);
        }
示例#14
0
 public IQueryBuilder AddSelect(string fieldName, string asName = null)
 {
     SelectFields.Add(SelectNameAs(fieldName, asName));
     return(this);
 }
示例#15
0
        public FluentQuery Execute(Action <IEnumerable <AssetClassBase> > successCallback = null)
        {
            if (OnSuccess == null && successCallback == null)
            {
                throw new NullReferenceException("Must specify the OnSuccess callback before calling Execute or pass it directly to Execute as a parameter");
            }

            try
            {
                var attributes = new List <IAttributeDefinition>();

                if (SelectFields.Count > 0)
                {
                    attributes.AddRange(
                        SelectFields.Select(
                            m => MetaModelProvider.Meta.GetAttributeDefinition(AssetTypeName
                                                                               + "." + m.ToString())));
                }
                RawQuery.Selection.AddRange(attributes);

                if (WhereCriteria.Count > 0)
                {
                    var andTerms = new List <FilterTerm>();

                    foreach (var tuple in WhereCriteria)
                    {
                        var attribute = MetaModelProvider.Meta.GetAttributeDefinition(AssetTypeName
                                                                                      + "." + tuple.Item1);
                        var item = tuple.Item2;
                        var term = new FilterTerm(attribute);
                        term.Operate(tuple.Item3, item);
                        andTerms.Add(term);
                    }

                    var andTerm = new AndFilterTerm(andTerms.ToArray());
                    RawQuery.Filter = andTerm;
                }

                var list = new List <AssetClassBase>();

                var result = ServicesProvider.Services.Retrieve(RawQuery);

                if (result.Assets.Count == 0)
                {
                    OnSuccess(list);
                }

                list.AddRange(result.Assets.Select(a => new AssetClassBase(a, AssetTypeName)));

                if (list.Count == 0 && OnEmptyResults != null)
                {
                    OnEmptyResults();
                }

                if (successCallback != null)
                {
                    successCallback(list);
                }
                else
                {
                    OnSuccess(list);
                }
            }
            catch (Exception exception)
            {
                if (OnError != null)
                {
                    OnError(exception);
                }
                else
                {
                    throw;
                }
            }

            return(this);
        }
示例#16
0
        public override string RenderString()
        {
            var result = new StringBuilder();

            result.Append(DefaultSqlSelect + " ");

            // fields
            if (SelectFields.Count > 0)
            {
                result.Append(string.Join(", ", SelectFields.ToArray()));
            }
            else
            {
                result.Append("*");
            }

            // table
            result.Append(" " + DefaultSqlFrom + " " + TableName);

            // joins
            if (QueryJoins.Count > 0)
            {
                foreach (QueryJoin qj in QueryJoins)
                {
                    switch (qj.JoinType)
                    {
                    default:
                    case QueryJoinType.Inner:
                        result.Append(DefaultInnerJoin);
                        break;

                    case QueryJoinType.Cross:
                        result.Append(DefaultCrossJoin);
                        break;

                    case QueryJoinType.OutterLeft:
                        result.Append(DefaultLeftJoin);
                        break;

                    case QueryJoinType.OutterRight:
                        result.Append(DefaultRightJoin);
                        break;
                    }

                    result.Append(" " + DefaultSqlJoin + " " + qj.TableName);

                    if (qj.JoinConditions.Count > 0)
                    {
                        result.Append(DefaultSqlJoinOn + " ");
                        result.Append(string.Join(DefaultSqlAnd, qj.JoinConditions.ToArray()));
                    }
                }
            }

            // conditions
            if (Conditions.Count > 0)
            {
                result.Append(" " + DefaultSqlWhere + " ");
                result.Append(string.Join(DefaultSqlAnd, Conditions.ToArray()));
            }

            return(result.ToString());
        }
示例#17
0
        public void Process()
        {
            string        _where, _dateField, _sql, _str;
            string        _stage     = "";
            List <string> _xmlFields = new List <string>();
            Dictionary <int, Dictionary <string, string> > _results;

            try
            {
                //
                _stage  = "Preparing WHERE clause";
                _where  = String.IsNullOrEmpty(SelectCondition) ? "" : " and (" + SelectCondition + ")";
                _where += String.IsNullOrEmpty(AlarmField) ? "" : $" and {AlarmField} in (select valor_alarma from det_alarmas where codigo='{Code}')";

                // Changes the date column name from xfec to fecha when true
                _dateField = ColumnDate ? "fecha" : "xfec";

                //
                _stage = "Identify XML fields";
                var _fields = SelectFields.Split(",");
                foreach (string _field in _fields)
                {
                    if (_field.Contains("\\XML"))
                    {
                        _xmlFields.Add(_field.Replace("\\XML", ""));
                    }
                }
                if (_xmlFields.Count > 0)
                {
                    SelectFields = SelectFields.Replace("\\XML", "");
                }


                //
                _stage = "Building SQL";
                _sql   = $"select {SelectFields},Fecha=convert(varchar(17),{_dateField},113), Registro={IdRegName} from {DB}..{Table} ";

                // If it is a "flagged" alarm, it has to take into consideration the REPORTED flag in the table, not the idreg value.
                if (!Flagged)
                {
                    _sql += $"where {IdRegName}>{(int)(IdRegValue == null ? 0 : IdRegValue)} {_where}";
                }
                else
                {
                    _sql += $"where GENERAL.dbo.checkFlag(flags,'REPORTED')=0 {_where}";
                }
                _sql += $" order by {_dateField}";

                //
                // Server change (for future improvement)
                // if (String.IsNullOrEmpty(Server)) ...

                //
                _stage = "Executing query";
                Recordset _rs = new Recordset(_sql, DA);
                _rs.Open();

                // If no results, the alarm was not triggered
                Triggered = !_rs.EOF;
                if (!Triggered)
                {
                    return;
                }

                //
                _stage   = "Converting data to dictionary";
                _results = null;// cDBt.ToDictionary();

                //
                _stage   = "Building contents from results";
                Contents = $"<table><tr><th colspan=2>Alarm {Code} triggered by the following values:</th></tr> ";
                while (!_rs.EOF)
                {
                    foreach (var _field in _rs.Fields)
                    {
                        if (_xmlFields.Contains(_field))
                        {
                            XmlDocument _xml = new XmlDocument();
                            _xml.LoadXml(_rs[_field].ToString());
                            _str = XMLToString(_xml, 0, false);
                        }
                        {
                            _str = _rs[_field].ToString();
                        }
                        Contents += $"<tr><td align=\"right\" valign=\"top\">{_field}:  </td><td>{_str}</td></tr>";
                    }
                    Contents += "<tr><td colspan=2 align=\"center\">-------------------------------</td></tr>";
                    _rs.MoveNext();
                }

                using (SP _sp = new SP(DA, "pControl_Alarmas"))
                {
                    string _msg = "", _warningMsg = "";

                    _sp.AddParameterValues("msg", _msg);
                    _sp.AddParameterValues("msg_aviso", _warningMsg);
                    _sp.AddParameterValues("codigo", Code);
                    _sp.AddParameterValues("resultado", Contents);
                    _sp.AddParameterValues("idreg", IdRegValue);
                    _sp.Execute();
                    _msg = _sp.Msg;
                }
            }
            catch (Exception ex)
            {
                Error = true;
                string _errorMessage = $"[{this.GetType().Name}/{System.Reflection.MethodBase.GetCurrentMethod().Name}#{_stage}] {ex.Message}";

                // Match the last occurrence of [xxx#xxx] to ensure it's part of our error message, not part of the system error. This is to show the error message in bold.
                Match _match = Regex.Match(_errorMessage, @"\[([^\[]*)#([^\[]*)\]", RegexOptions.RightToLeft);
                int   _i     = _match.Index + _match.Length;

                // Set to bold the error message, ignoring all the "call stack" string, and prepare the html code.
                Contents = _errorMessage.Substring(0, _i) + "<ul><strong>" + _errorMessage.Substring(_i + 1);
                Contents = $"<html><body>Alarm: {Code}<br>Error:<br>" + Contents.Replace("] ", "]<ul>") + "</strong></body></html>";
            }
            return;
        }
示例#18
0
 new protected string GetSelectFrom()
 {
     return($"SELECT {GetDistinct()} {SpecialAction}({SelectFields.GetFieldNames()}) FROM {MainTable}");
 }
示例#19
0
 new protected string GetSelectFrom()
 {
     return($"SELECT {GetDistinct()} {SelectFields.GetFieldNames()} {GetINTO()} FROM {MainTable}");
 }