예제 #1
0
        private void BuildTextSearchWhereFIlters(
            SelectQuery query,
            string queryText,
            MappedSearchRequest request)
        {
            if (!string.IsNullOrEmpty(queryText) && CanFilterOnText())
            {
                var canUseFullText = false;

                var queryColumns = request.TextFilterColumns;
                if ((queryColumns == null || !queryColumns.Any()) && _constants.TextSearchColumnId > 0)
                {
                    // set queryColumns to the default column
                    var defaultTextSearchColumn = _columnProvider.GetColumnMapping(_constants.DataSourceId, _constants.TextSearchColumnId);
                    queryColumns = new List <ReportColumnMapping>()
                    {
                        defaultTextSearchColumn
                    };
                    canUseFullText = _constants.FullTextSearchEnabled;
                }

                if (!queryColumns.Any())
                {
                    // do nothing
                    return;
                }

                // Add Text Search
                if (queryText.StartsWith("*"))
                {
                    queryText      = queryText.Substring(1); // remove the *
                    canUseFullText = false;
                }

                if (canUseFullText)
                {
                    // we are using the default column (and there's only 1)
                    var tableMapping = _tableMappings.GetTableMapping(queryColumns.First().KnownTable);
                    query.WhereColumnContains(tableMapping.Alias, queryColumns.First().FieldName, queryText, ContainsMode.FreeText);
                }
                else
                {
                    var filters = new WhereFilterCollection();

                    foreach (var column in queryColumns)
                    {
                        var tableMapping = _tableMappings.GetTableMapping(column.KnownTable);
                        filters.WhereColumnLike(tableMapping.Alias, column.FieldName, queryText, LikeMode.FreeText);
                    }

                    query.WhereCollection(Combine.Or, filters);
                }
            }
        }
예제 #2
0
 public static WhereFilterCollection WhereColumnLike(this WhereFilterCollection query, Table leftTable, string leftField, string text, LikeMode mode = LikeMode.Default)
 {
     query.WhereColumnLike(leftTable.Alias, leftField, text, mode);
     return(query);
 }