void AddFilterOfTypeCallback(object type)
 {
     Undo.RecordObject(m_compositionManager, "Add input filter");
     m_compositionManager.AddInputFilterAtLayer(CompositionFilter.Create((CompositionFilter.FilterType)type), m_layerList.index);
     m_SerializedProperties.layerList.serializedObject.Update();
     CacheSerializedObjects();
 }
        public IEnumerable <Composition> ApplyFilter(CompositionFilter filter)
        {
            var queryString  = CreateQueryString(filter);
            var compositions = new List <Composition>();

            using (var connection = new OracleConnection(_oracleHelper.Connection))
            {
                var command = new OracleCommand(queryString, connection);
                connection.Open();
                using (var reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        compositions.Add(new Composition
                        {
                            Id         = reader.GetInt32(0),
                            Title      = reader.GetString(1),
                            Annotation = reader.GetString(2)
                        });
                    }
                }
            }

            return(compositions);
        }
        private string CreateQueryString(CompositionFilter filter)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append($"select distinct kudriavtseva_compositions.* from {Tables[TableName.Compositions]}");
            bool isConditiondAdded = false;

            if (!filter.SelectedTypes.Any() && !filter.SelectedAuthors.Any() && !filter.SelectedLangs.Any() &&
                !filter.SelectedTypes.Any() && string.IsNullOrWhiteSpace(filter.partialTextTitle))
            {
                return(sb.ToString());
            }

            sb.Append($" inner join " +
                      "kudriavtseva_comps_genres on " +
                      "kudriavtseva_comps_genres.composition_id = kudriavtseva_compositions.composition_id " +
                      "inner join " +
                      "kudriavtseva_genres on " +
                      "kudriavtseva_comps_genres.genre_id = kudriavtseva_genres.genre_id " +
                      "inner join " +
                      "kudriavtseva_comps_authors on " +
                      "kudriavtseva_comps_authors.composition_id = kudriavtseva_compositions.composition_id " +
                      "inner join " +
                      "kudriavtseva_authors on kudriavtseva_comps_authors.author_id = " +
                      "kudriavtseva_authors.author_id"
                      );

            sb.Append(" where ");


            if (!string.IsNullOrWhiteSpace(filter.partialTextTitle))
            {
                sb.Append(ApplyPartialTextSearchFilter(filter.partialTextTitle, "title"));
                isConditiondAdded = true;
            }

            if (filter.SelectedGenres.Any())
            {
                sb.Append(ApplyStringIdsFilter(filter.SelectedGenres, "kudriavtseva_comps_genres.genre_id",
                                               isConditiondAdded));
                isConditiondAdded = true;
            }

            if (filter.SelectedAuthors.Any())
            {
                sb.Append(ApplyStringIdsFilter(filter.SelectedAuthors, "kudriavtseva_comps_authors.author_id",
                                               isConditiondAdded));
                isConditiondAdded = true;
            }

            if (filter.SelectedLangs.Any())
            {
                sb.Append(ApplyStringIdsFilter(filter.SelectedLangs, "language_id", isConditiondAdded));
                isConditiondAdded = true;
            }


            if (filter.SelectedTypes.Any())
            {
                sb.Append(ApplyStringIdsFilter(filter.SelectedTypes, "type_id", isConditiondAdded));
                isConditiondAdded = true;
            }


            return(sb.ToString());
        }