|
42 | 42 | import org.hibernate.ScrollMode;
|
43 | 43 | import org.hibernate.boot.model.TypeContributions;
|
44 | 44 | import org.hibernate.cfg.AvailableSettings;
|
45 |
| -import org.hibernate.dialect.function.LocateEmulation; |
| 45 | +import org.hibernate.dialect.function.CommonFunctionFactory; |
46 | 46 | import org.hibernate.dialect.identity.HANAIdentityColumnSupport;
|
47 | 47 | import org.hibernate.dialect.identity.IdentityColumnSupport;
|
48 | 48 | import org.hibernate.dialect.pagination.AbstractLimitHandler;
|
@@ -274,118 +274,32 @@ public AbstractHANADialect() {
|
274 | 274 | @Override
|
275 | 275 | public void initializeFunctionRegistry(QueryEngine queryEngine) {
|
276 | 276 | super.initializeFunctionRegistry( queryEngine );
|
277 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_date", StandardSpiBasicTypes.DATE ); |
278 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_seconddate", StandardSpiBasicTypes.TIMESTAMP ); |
279 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_time", StandardSpiBasicTypes.TIME ); |
280 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_timestamp", StandardSpiBasicTypes.TIMESTAMP ); |
281 |
| - |
282 |
| - queryEngine.getSqmFunctionRegistry().registerNoArgs( "current_utcdate", StandardSpiBasicTypes.DATE ); |
283 |
| - queryEngine.getSqmFunctionRegistry().registerNoArgs( "current_utctime", StandardSpiBasicTypes.TIME ); |
284 |
| - queryEngine.getSqmFunctionRegistry().registerNoArgs( "current_utctimestamp", StandardSpiBasicTypes.TIMESTAMP ); |
285 |
| - |
286 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "add_days" ); |
287 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "add_months" ); |
288 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "add_seconds" ); |
289 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "add_years" ); |
290 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "dayname", StandardSpiBasicTypes.STRING ); |
291 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "dayofmonth", StandardSpiBasicTypes.INTEGER ); |
292 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "dayofyear", StandardSpiBasicTypes.INTEGER ); |
293 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "days_between", StandardSpiBasicTypes.INTEGER ); |
294 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "hour", StandardSpiBasicTypes.INTEGER ); |
295 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "isoweek", StandardSpiBasicTypes.STRING ); |
296 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "last_day", StandardSpiBasicTypes.DATE ); |
297 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "localtoutc", StandardSpiBasicTypes.TIMESTAMP ); |
298 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "minute", StandardSpiBasicTypes.INTEGER ); |
299 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "month", StandardSpiBasicTypes.INTEGER ); |
300 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "monthname", StandardSpiBasicTypes.STRING ); |
301 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "next_day", StandardSpiBasicTypes.DATE ); |
302 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "quarter", StandardSpiBasicTypes.STRING ); |
303 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "second", StandardSpiBasicTypes.INTEGER ); |
304 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "seconds_between", StandardSpiBasicTypes.LONG ); |
305 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "week", StandardSpiBasicTypes.INTEGER ); |
306 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "weekday", StandardSpiBasicTypes.INTEGER ); |
307 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "year", StandardSpiBasicTypes.INTEGER ); |
308 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "utctolocal", StandardSpiBasicTypes.TIMESTAMP ); |
309 |
| - |
310 |
| - |
311 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_bigint", StandardSpiBasicTypes.LONG ); |
312 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_binary", StandardSpiBasicTypes.BINARY ); |
313 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_decimal", StandardSpiBasicTypes.BIG_DECIMAL ); |
314 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_double", StandardSpiBasicTypes.DOUBLE ); |
315 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_int", StandardSpiBasicTypes.INTEGER ); |
316 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_integer", StandardSpiBasicTypes.INTEGER ); |
317 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_real", StandardSpiBasicTypes.FLOAT ); |
318 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_smalldecimal", StandardSpiBasicTypes.BIG_DECIMAL ); |
319 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_smallint", StandardSpiBasicTypes.SHORT ); |
320 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_tinyint", StandardSpiBasicTypes.BYTE ); |
321 |
| - |
322 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "bin2hex", StandardSpiBasicTypes.STRING ); |
323 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "bitand", StandardSpiBasicTypes.LONG ); |
| 277 | + |
324 | 278 | queryEngine.getSqmFunctionRegistry().registerNamed( "greatest" );
|
325 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "hex2bin", StandardSpiBasicTypes.BINARY ); |
326 | 279 | queryEngine.getSqmFunctionRegistry().registerNamed( "least" );
|
327 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "log", StandardSpiBasicTypes.DOUBLE ); |
328 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "uminus" ); |
329 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "round" ); |
330 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "sinh", StandardSpiBasicTypes.DOUBLE ); |
331 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "tanh", StandardSpiBasicTypes.DOUBLE ); |
332 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "cosh", StandardSpiBasicTypes.DOUBLE ); |
333 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "cot", StandardSpiBasicTypes.DOUBLE ); |
334 |
| - |
335 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_alphanum", StandardSpiBasicTypes.STRING ); |
336 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_nvarchar", StandardSpiBasicTypes.STRING ); |
337 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_varchar", StandardSpiBasicTypes.STRING ); |
338 |
| - |
339 |
| - queryEngine.getSqmFunctionRegistry().registerVarArgs( "concat", StandardSpiBasicTypes.STRING, "(", "||", ")" ); |
340 |
| - |
341 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "ascii", StandardSpiBasicTypes.INTEGER ); |
342 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "char", StandardSpiBasicTypes.CHARACTER ); |
343 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "left", StandardSpiBasicTypes.STRING ); |
344 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "lpad", StandardSpiBasicTypes.STRING ); |
345 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "ltrim", StandardSpiBasicTypes.STRING ); |
346 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "nchar", StandardSpiBasicTypes.STRING ); |
347 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "right", StandardSpiBasicTypes.STRING ); |
348 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "rpad", StandardSpiBasicTypes.STRING ); |
349 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "rtrim", StandardSpiBasicTypes.STRING ); |
350 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "substr_after", StandardSpiBasicTypes.STRING ); |
351 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "substr_before", StandardSpiBasicTypes.STRING ); |
352 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "unicode", StandardSpiBasicTypes.INTEGER ); |
353 |
| - queryEngine.getSqmFunctionRegistry().registerPattern( "bit_length", "(length(to_binary(?1))*8)", StandardSpiBasicTypes.INTEGER ); |
354 | 280 |
|
355 |
| - queryEngine.getSqmFunctionRegistry().register( |
356 |
| - "locate", |
357 |
| - new LocateEmulation( |
358 |
| - queryEngine.getSqmFunctionRegistry() |
359 |
| - .patternTemplateBuilder( "locate/2", "locate(?2, ?1)" ) |
360 |
| - .setExactArgumentCount( 2 ) |
361 |
| - .setInvariantType( StandardSpiBasicTypes.INTEGER ) |
362 |
| - .register(), |
363 |
| - queryEngine.getSqmFunctionRegistry() |
364 |
| - .patternTemplateBuilder( "locate/3", "locate(?2, ?1, ?3)" ) |
365 |
| - .setExactArgumentCount( 3 ) |
366 |
| - .setInvariantType( StandardSpiBasicTypes.INTEGER ) |
367 |
| - .register() |
368 |
| - ) |
369 |
| - ); |
| 281 | + queryEngine.getSqmFunctionRegistry().registerPattern( "bit_length", "(length(to_binary(?1))*8)", StandardSpiBasicTypes.INTEGER ); |
370 | 282 |
|
371 |
| - queryEngine.getSqmFunctionRegistry().namedTemplateBuilder( "ceiling", "ceil" ) |
372 |
| - .setExactArgumentCount( 1 ) |
373 |
| - .setInvariantType( StandardSpiBasicTypes.DOUBLE ) |
374 |
| - .register(); |
375 |
| - |
376 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_blob", StandardSpiBasicTypes.BLOB ); |
377 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_clob", StandardSpiBasicTypes.CLOB ); |
378 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "to_nclob", StandardSpiBasicTypes.NCLOB ); |
379 |
| - |
380 |
| - queryEngine.getSqmFunctionRegistry().registerNoArgs( "current_connection", StandardSpiBasicTypes.INTEGER ); |
381 |
| - queryEngine.getSqmFunctionRegistry().registerNoArgs( "current_schema", StandardSpiBasicTypes.STRING ); |
382 |
| - queryEngine.getSqmFunctionRegistry().registerNoArgs( "current_user", StandardSpiBasicTypes.STRING ); |
383 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "grouping_id", StandardSpiBasicTypes.INTEGER); |
384 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "ifnull" ); |
385 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "map" ); |
386 |
| - queryEngine.getSqmFunctionRegistry().registerNamed( "session_context" ); |
387 |
| - queryEngine.getSqmFunctionRegistry().registerNoArgs( "session_user", StandardSpiBasicTypes.STRING ); |
388 |
| - queryEngine.getSqmFunctionRegistry().registerNoArgs( "sysuuid", StandardSpiBasicTypes.STRING ); |
| 283 | + CommonFunctionFactory.locate( queryEngine, "locate(?2, ?1)", "locate(?2, ?1, ?3)" ); |
| 284 | + CommonFunctionFactory.ceiling_ceil( queryEngine ); |
| 285 | + CommonFunctionFactory.ifnull( queryEngine ); |
| 286 | + CommonFunctionFactory.concat_operator( queryEngine ); |
| 287 | + CommonFunctionFactory.pad( queryEngine ); |
| 288 | + CommonFunctionFactory.trim2( queryEngine ); |
| 289 | + CommonFunctionFactory.chr_char( queryEngine ); |
| 290 | + CommonFunctionFactory.cot( queryEngine ); |
| 291 | + CommonFunctionFactory.cosh( queryEngine ); |
| 292 | + CommonFunctionFactory.sinh( queryEngine ); |
| 293 | + CommonFunctionFactory.tanh( queryEngine ); |
| 294 | + CommonFunctionFactory.bitand( queryEngine ); |
| 295 | + CommonFunctionFactory.hourMinuteSecond( queryEngine ); |
| 296 | + CommonFunctionFactory.yearMonthDay( queryEngine ); |
| 297 | + CommonFunctionFactory.dayofweekmonthyear( queryEngine ); |
| 298 | + CommonFunctionFactory.weekQuarter( queryEngine ); |
| 299 | + CommonFunctionFactory.daynameMonthname( queryEngine ); |
| 300 | + CommonFunctionFactory.lastDay( queryEngine ); |
| 301 | + CommonFunctionFactory.leftRight( queryEngine ); |
| 302 | + CommonFunctionFactory.leastGreatest( queryEngine ); |
389 | 303 | }
|
390 | 304 |
|
391 | 305 | @Override
|
|
0 commit comments