56
56
import tech .ydb .hibernate .dialect .exporter .EmptyExporter ;
57
57
import tech .ydb .hibernate .dialect .exporter .YdbIndexExporter ;
58
58
import tech .ydb .hibernate .dialect .hint .IndexQueryHintHandler ;
59
+ import tech .ydb .hibernate .dialect .hint .QueryHintHandler ;
60
+ import tech .ydb .hibernate .dialect .hint .ScanQueryHintHandler ;
59
61
import tech .ydb .hibernate .dialect .translator .YdbSqlAstTranslatorFactory ;
60
62
import tech .ydb .hibernate .dialect .types .InstantJavaType ;
61
63
import tech .ydb .hibernate .dialect .types .InstantJdbcType ;
@@ -72,6 +74,10 @@ public class YdbDialect extends Dialect {
72
74
73
75
private static final Exporter <ForeignKey > FOREIGN_KEY_EMPTY_EXPORTER = new EmptyExporter <>();
74
76
private static final Exporter <Constraint > UNIQUE_KEY_EMPTY_EXPORTER = new EmptyExporter <>();
77
+ private static final List <QueryHintHandler > QUERY_HINT_HANDLERS = List .of (
78
+ IndexQueryHintHandler .INSTANCE ,
79
+ ScanQueryHintHandler .INSTANCE
80
+ );
75
81
76
82
public YdbDialect (DialectResolutionInfo dialectResolutionInfo ) {
77
83
super (dialectResolutionInfo );
@@ -144,11 +150,29 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
144
150
@ Override
145
151
public String addSqlHintOrComment (String sql , QueryOptions queryOptions , boolean commentsEnabled ) {
146
152
if (queryOptions .getDatabaseHints () != null ) {
147
- sql = IndexQueryHintHandler .addQueryHints (sql , queryOptions .getDatabaseHints ());
153
+ for (var queryHintHandler : QUERY_HINT_HANDLERS ) {
154
+ sql = queryHintHandler .addQueryHints (sql , queryOptions .getDatabaseHints ());
155
+ }
148
156
}
149
157
150
- if (queryOptions .getComment () != null && IndexQueryHintHandler .commentIsHint (queryOptions .getComment ())) {
151
- return IndexQueryHintHandler .addQueryHints (sql , List .of (queryOptions .getComment ()));
158
+ if (queryOptions .getComment () != null ) {
159
+ boolean commentIsHint = false ;
160
+
161
+ var hints = queryOptions .getComment ().split ("," );
162
+
163
+ for (var queryHintHandler : QUERY_HINT_HANDLERS ) {
164
+ for (var hint : hints ) {
165
+ hint = hint .trim ();
166
+ if (queryHintHandler .commentIsHint (hint )) {
167
+ commentIsHint = true ;
168
+ sql = queryHintHandler .addQueryHints (sql , List .of (hint ));
169
+ }
170
+ }
171
+ }
172
+
173
+ if (commentIsHint ) {
174
+ return sql ;
175
+ }
152
176
}
153
177
154
178
if (commentsEnabled && queryOptions .getComment () != null ) {
0 commit comments