1+ /*
2+ * BSD 3-Clause License
3+ *
4+ * Copyright (c) 2019, CROC Inc.
5+ * All rights reserved.
6+ *
7+ * Redistribution and use in source and binary forms, with or without
8+ * modification, are permitted provided that the following conditions are met:
9+ *
10+ * 1. Redistributions of source code must retain the above copyright notice, this
11+ * list of conditions and the following disclaimer.
12+ *
13+ * 2. Redistributions in binary form must reproduce the above copyright notice,
14+ * this list of conditions and the following disclaimer in the documentation
15+ * and/or other materials provided with the distribution.
16+ *
17+ * 3. Neither the name of the copyright holder nor the names of its
18+ * contributors may be used to endorse or promote products derived from
19+ * this software without specific prior written permission.
20+ *
21+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
25+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31+ */
32+
33+ package com.github.mgramin.sqlboot.sql.select.wrappers
34+
35+ import com.github.mgramin.sqlboot.sql.select.SelectQuery
36+ import com.google.gson.JsonObject
37+
38+
39+ class CustomFilteredSelectQuery (
40+ private val origin : SelectQuery ,
41+ private val filter : JsonObject
42+ ) : SelectQuery {
43+
44+ override fun query (): String {
45+ return if (filter.entrySet().size > 0 ) {
46+ val whereCondition = filter.entrySet()
47+ .joinToString(prefix = " where " , separator = " and " ) { """ ${it.key} = '${it.value.asString} '""" }
48+ """ select *
49+ | from (${origin.query()} ) q
50+ | $whereCondition """ .trimMargin()
51+ } else {
52+ origin.query()
53+ }
54+ }
55+
56+ override fun properties () = origin.properties()
57+
58+ override fun columns () = origin.columns()
59+
60+ override fun execute (variables : Map <String , Any >) = origin.execute(variables)
61+ }
0 commit comments