1313 */
1414package io .trino .gateway .ha .persistence .dao ;
1515
16+ import org .jdbi .v3 .core .mapper .RowMapper ;
17+ import org .jdbi .v3 .core .statement .StatementContext ;
1618import org .jdbi .v3 .sqlobject .statement .SqlQuery ;
1719import org .jdbi .v3 .sqlobject .statement .SqlUpdate ;
20+ import org .jdbi .v3 .sqlobject .statement .UseRowMapper ;
1821
22+ import java .sql .ResultSet ;
23+ import java .sql .ResultSetMetaData ;
24+ import java .sql .SQLException ;
1925import java .util .List ;
2026
27+ import static java .util .Locale .ENGLISH ;
28+
2129public interface GatewayBackendDao
2230{
31+ @ UseRowMapper (GatewayBackendIntToBooleanMapper .class )
2332 @ SqlQuery ("SELECT * FROM gateway_backend" )
2433 List <GatewayBackend > findAll ();
2534
35+ @ UseRowMapper (GatewayBackendIntToBooleanMapper .class )
2636 @ SqlQuery ("""
2737 SELECT * FROM gateway_backend
2838 WHERE active = true
2939 """ )
3040 List <GatewayBackend > findActiveBackend ();
3141
42+ @ UseRowMapper (GatewayBackendIntToBooleanMapper .class )
43+ @ SqlQuery ("""
44+ SELECT * FROM gateway_backend
45+ WHERE active = 1
46+ """ )
47+ List <GatewayBackend > findActiveBackendNoBoolean ();
48+
49+ default List <GatewayBackend > findActiveBackend (boolean isSupportsBooleanColumn )
50+ {
51+ if (isSupportsBooleanColumn ) {
52+ return findActiveBackend ();
53+ }
54+
55+ return findActiveBackendNoBoolean ();
56+ }
57+
58+ @ UseRowMapper (GatewayBackendIntToBooleanMapper .class )
3259 @ SqlQuery ("""
3360 SELECT * FROM gateway_backend
3461 WHERE active = true AND routing_group = 'adhoc'
3562 """ )
3663 List <GatewayBackend > findActiveAdhocBackend ();
3764
65+ @ UseRowMapper (GatewayBackendIntToBooleanMapper .class )
66+ @ SqlQuery ("""
67+ SELECT * FROM gateway_backend
68+ WHERE active = 1 AND routing_group = 'adhoc'
69+ """ )
70+ List <GatewayBackend > findActiveAdhocBackendNoBoolean ();
71+
72+ default List <GatewayBackend > findActiveAdhocBackend (boolean isSupportsBooleanColumn )
73+ {
74+ if (isSupportsBooleanColumn ) {
75+ return findActiveAdhocBackend ();
76+ }
77+
78+ return findActiveAdhocBackendNoBoolean ();
79+ }
80+
81+ @ UseRowMapper (GatewayBackendIntToBooleanMapper .class )
3882 @ SqlQuery ("""
3983 SELECT * FROM gateway_backend
4084 WHERE active = true AND routing_group = :routingGroup
4185 """ )
4286 List <GatewayBackend > findActiveBackendByRoutingGroup (String routingGroup );
4387
88+ @ UseRowMapper (GatewayBackendIntToBooleanMapper .class )
89+ @ SqlQuery ("""
90+ SELECT * FROM gateway_backend
91+ WHERE active = 1 AND routing_group = :routingGroup
92+ """ )
93+ List <GatewayBackend > findActiveBackendByRoutingGroupNoBoolean (String routingGroup );
94+
95+ default List <GatewayBackend > findActiveBackendByRoutingGroup (String routingGroup , boolean isSupportsBooleanColumn )
96+ {
97+ if (isSupportsBooleanColumn ) {
98+ return findActiveBackendByRoutingGroup (routingGroup );
99+ }
100+
101+ return findActiveBackendByRoutingGroupNoBoolean (routingGroup );
102+ }
103+
104+ @ UseRowMapper (GatewayBackendIntToBooleanMapper .class )
44105 @ SqlQuery ("""
45106 SELECT * FROM gateway_backend
46107 WHERE name = :name
47108 """ )
48109 List <GatewayBackend > findByName (String name );
49110
111+ @ UseRowMapper (GatewayBackendIntToBooleanMapper .class )
50112 @ SqlQuery ("""
51113 SELECT * FROM gateway_backend
52114 WHERE name = :name
53115 LIMIT 1
54116 """ )
55117 GatewayBackend findFirstByName (String name );
56118
119+ @ UseRowMapper (GatewayBackendIntToBooleanMapper .class )
120+ @ SqlQuery ("""
121+ SELECT * FROM gateway_backend
122+ WHERE name = :name
123+ FETCH FIRST 1 ROWS ONLY
124+ """ )
125+ GatewayBackend findFirstByNameWithFetch (String name );
126+
127+ default GatewayBackend findFirstByName (String name , boolean isLimitUnsupported ){
128+ if (isLimitUnsupported ) {
129+ return findFirstByNameWithFetch (name );
130+ }
131+
132+ return findFirstByName (name );
133+ }
134+
57135 @ SqlUpdate ("""
58136 INSERT INTO gateway_backend (name, routing_group, backend_url, external_url, active)
59137 VALUES (:name, :routingGroup, :backendUrl, :externalUrl, :active)
60138 """ )
61139 void create (String name , String routingGroup , String backendUrl , String externalUrl , boolean active );
62140
141+ @ SqlUpdate ("""
142+ INSERT INTO gateway_backend (name, routing_group, backend_url, external_url, active)
143+ VALUES (:name, :routingGroup, :backendUrl, :externalUrl, :active)
144+ """ )
145+ void createNoBoolean (String name , String routingGroup , String backendUrl , String externalUrl , int active );
146+
147+ default void create (String name , String routingGroup , String backendUrl , String externalUrl , boolean active , boolean isSupportsBooleanColumn )
148+ {
149+ if (isSupportsBooleanColumn ) {
150+ create (name , routingGroup , backendUrl , externalUrl , active );
151+ return ;
152+ }
153+ createNoBoolean (name , routingGroup , backendUrl , externalUrl , active ? 1 : 0 );
154+ }
155+
63156 @ SqlUpdate ("""
64157 UPDATE gateway_backend
65158 SET routing_group = :routingGroup, backend_url = :backendUrl, external_url = :externalUrl, active = :active
66159 WHERE name = :name
67160 """ )
68161 void update (String name , String routingGroup , String backendUrl , String externalUrl , boolean active );
69162
163+ @ SqlUpdate ("""
164+ UPDATE gateway_backend
165+ SET routing_group = :routingGroup, backend_url = :backendUrl, external_url = :externalUrl, active = :active
166+ WHERE name = :name
167+ """ )
168+ void updateNoBoolean (String name , String routingGroup , String backendUrl , String externalUrl , int active );
169+
170+ default void update (String name , String routingGroup , String backendUrl , String externalUrl , boolean active , boolean isSupportsBooleanColumn )
171+ {
172+ if (isSupportsBooleanColumn ) {
173+ update (name , routingGroup , backendUrl , externalUrl , active );
174+ return ;
175+ }
176+ updateNoBoolean (name , routingGroup , backendUrl , externalUrl , active ? 1 : 0 );
177+ }
178+
70179 @ SqlUpdate ("""
71180 UPDATE gateway_backend
72181 SET active = false
@@ -86,4 +195,28 @@ INSERT INTO gateway_backend (name, routing_group, backend_url, external_url, act
86195 WHERE name = :name
87196 """ )
88197 void deleteByName (String name );
198+
199+ class GatewayBackendIntToBooleanMapper
200+ implements RowMapper <GatewayBackend >
201+ {
202+ @ Override
203+ public GatewayBackend map (ResultSet resultSet , StatementContext ctx )
204+ throws SQLException
205+ {
206+ boolean active ;
207+ ResultSetMetaData resultSetMetaData = resultSet .getMetaData ();
208+ if (resultSetMetaData .getColumnClassName (5 ).toLowerCase (ENGLISH ).startsWith ("int" )) {
209+ active = resultSet .getInt (5 ) != 0 ;
210+ }
211+ else {
212+ active = resultSet .getBoolean (5 );
213+ }
214+ return new GatewayBackend (
215+ resultSet .getString ("name" ),
216+ resultSet .getString ("routing_group" ),
217+ resultSet .getString ("backend_url" ),
218+ resultSet .getString ("external_url" ),
219+ active );
220+ }
221+ }
89222}
0 commit comments