Hibernate-reactive: MS SQL рд╕рд░реНрд╡рд░ рдФрд░ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡ 1.0.0.CR9 рдкрд░ рдкрд░рд┐рдгрд╛рдо рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╕рдордп рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рддреНрд░реБрдЯрд┐

рдХреЛ рдирд┐рд░реНрдорд┐рдд 5 рдЕрдЧре░ 2021  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: hibernate/hibernate-reactive

рд╣реИрд▓реЛ, рдкреЗрдЬрд┐рдВрдЧ рдпрд╛ рд░реЗрдВрдЬ (рдПрд╕рдХреНрдпреВрдПрд▓ рдЕрдкрд╡рд╛рдж, рд╕рдВрджреЗрд╢ = 'рдЧрд▓рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдкрд╛рд╕'?'ред') рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ 1.0.0.CR9 рдореЗрдВ рдПрдордПрд╕ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ, рд╕рдВрднрд╡рддрдГ рдХреНрдпреЛрдВрдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдЪрдпрди рдЦрдВрдб рдореЗрдВ рд╣реИ?

рд╕реНрдЯреИрдХ: рдХреНрд╡рд╛рд░реНрдХрд╕ 2.1.0ред рдлрд╛рдЗрдирд▓ / рдкреИрдирд╛рдЪреЗ рд░рд┐рдПрдХреНрдЯрд┐рд╡ / рд╡рд┐рджреНрд░реЛрд╣реА 4.1.2 / рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡ 1.0.0.CR9 / рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЛрд░ 5.5.5ред рдлрд╛рдЗрдирд▓

рдореЗрд░реЗ рдмрд╛рдХреА рд╕рдВрд╕рд╛рдзрди рд╕реЗ, рдЗрд╕реЗ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ:
[PanacheRepository].find("firstName LIKE ?1").page(Page.of(25)).list();

рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдореЗрдВ SQL рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдпрд╣ рдЙрддреНрдкрд╛рджрд┐рдд SQL рд╣реИ:

Hibernate:
    select
        top(?) request0_.id as id1_1_,
        request0_.caseId as caseid2_1_,
        request0_.caseNumber as casenumb3_1_,
        request0_.expires as expires4_1_,
        request0_.addressLine1 as addressl5_1_,
        request0_.addressLine2 as addressl6_1_,
        request0_.agency as agency7_1_,
        request0_.city as city8_1_,
        request0_.email as email9_1_,
        request0_.firstName as firstna10_1_,
        request0_.lastName as lastnam11_1_,
        request0_.phone as phone12_1_,
        request0_.relationship as relatio13_1_,
        request0_.state as state14_1_,
        request0_.zipcode as zipcode15_1_,
        request0_.submitted as submitt16_1_
    from
        Request request0_
    where
        request0_.firstName like <strong i="11">@P1</strong>

рдЬрд╣рд╛рдВ рдХреНрд▓реЙрдЬ рдореЗрдВ рд╕рд╣реА рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рд▓реЗрдХрд┐рди рдЪрдпрди рдХреНрд▓реЙрдЬ рдореЗрдВ "рдЯреЙрдк (?)" рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реБрдЖред
рдЕрдЧрд░ рдореИрдВ рдкреЗрдЬрд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдХреНрд╡реЗрд░реА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИред

рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдЯреНрд░реЗрд╕ рд▓реЙрдЧрд┐рдВрдЧ, рдПрдЪрдХреНрдпреВрдПрд▓ рдФрд░ рдПрд╕рдХреНрдпреВрдПрд▓ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Panache рдХреНрд╡реЗрд░реА рдкрд░ setMaxResults() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрд╡рд╛рд░реНрдХрд╕ рдпрд╛ рд╡рд┐рджреНрд░реЛрд╣ рдХреЗ рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реБрдИ рдЕрдЧрд░ рдпрд╣ рдореБрджреНрджрд╛ рд╣реИ, рдФрд░ рдЕрдЧреНрд░рд┐рдо рдзрдиреНрдпрд╡рд╛рдж!

2021-08-05 12:55:57,342 DEBUG [org.hib.hql.int.ast.QueryTranslatorImpl] (vert.x-eventloop-thread-1) HQL: FROM myproject.entities.Request WHERE requestor.firstName LIKE ?1
2021-08-05 12:55:57,342 DEBUG [org.hib.hql.int.ast.QueryTranslatorImpl] (vert.x-eventloop-thread-1) SQL: select request0_.id as id1_1_, request0_.caseId as caseid2_1_, request0_.caseNumber as casenumb3_1_, request0_.expires as expires4_1_, request0_.addressLine1 as addressl5_1_, request0_.addressLine2 as addressl6_1_, request0_.agency as agency7_1_, request0_.city as city8_1_, request0_.email as email9_1_, request0_.firstName as firstna10_1_, request0_.lastName as lastnam11_1_, request0_.phone as phone12_1_, request0_.relationship as relatio13_1_, request0_.state as state14_1_, request0_.zipcode as zipcode15_1_, request0_.submitted as submitt16_1_ from Request request0_ where request0_.firstName like ?
2021-08-05 12:55:57,342 DEBUG [org.hib.hql.int.ast.ErrorTracker] (vert.x-eventloop-thread-1) throwQueryException() : no errors
2021-08-05 12:55:57,342 TRACE [org.hib.rea.ses.imp.ReactiveHQLQueryPlan] (vert.x-eventloop-thread-1) Find: FROM myproject.entities.Request WHERE requestor.firstName LIKE ?1
2021-08-05 12:55:57,344 TRACE [org.hib.eng.spi.QueryParameters] (vert.x-eventloop-thread-1) Named parameters: {1=%j%}
2021-08-05 12:55:57,345 TRACE [org.hib.typ.des.sql.BasicBinder] (vert.x-eventloop-thread-1) binding parameter [2] as [VARCHAR] - [%j%]
2021-08-05 12:55:57,345 TRACE [org.hib.loa.Loader] (vert.x-eventloop-thread-1) Bound [3] parameters total
2021-08-05 12:55:57,355 DEBUG [org.hib.SQL] (vert.x-eventloop-thread-1)
    select
        top(?) request0_.id as id1_1_,
        request0_.caseId as caseid2_1_,
        request0_.caseNumber as casenumb3_1_,
        request0_.expires as expires4_1_,
        request0_.addressLine1 as addressl5_1_,
        request0_.addressLine2 as addressl6_1_,
        request0_.agency as agency7_1_,
        request0_.city as city8_1_,
        request0_.email as email9_1_,
        request0_.firstName as firstna10_1_,
        request0_.lastName as lastnam11_1_,
        request0_.phone as phone12_1_,
        request0_.relationship as relatio13_1_,
        request0_.state as state14_1_,
        request0_.zipcode as zipcode15_1_,
        request0_.submitted as submitt16_1_
    from
        Request request0_
    where
        request0_.firstName like <strong i="18">@P1</strong>
2021-08-05 12:55:57,358 ERROR [org.hib.rea.errors] (vert.x-eventloop-thread-1) HR000057: Failed to execute statement [$1select request0_.id as id1_1_, request0_.caseId as caseid2_1_, request0_.caseNumber as casenumb3_1_, request0_.expires as expires4_1_, request0_.addressLine1 as addressl5_1_, request0_.addressLine2 as addressl6_1_, request0_.agency as agency7_1_, request0_.city as city8_1_, request0_.email as email9_1_, request0_.firstName as firstna10_1_, request0_.lastName as lastnam11_1_, request0_.phone as phone12_1_, request0_.relationship as relatio13_1_, request0_.state as state14_1_, request0_.zipcode as zipcode15_1_, request0_.submitted as submitt16_1_ from Request request0_ where request0_.firstName like @P1]: $2could not execute query: java.util.concurrent.CompletionException: io.vertx.mssqlclient.MSSQLException: {number=102, state=1, severity=15, message='Incorrect syntax near '?'.', serverName='aa3ae4a0fd3c', lineNumber=1, additional=[io.vertx.mssqlclient.MSSQLException: {number=8180, state=1, severity=16, message='Statement(s) could not be prepared.', serverName='aa3ae4a0fd3c', lineNumber=1}]}

рд╕рднреА 13 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЙрд╕ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЕрдЬреАрдм рд╣реИред

рд╣рдо рднреА рдХреНрдпреЛрдВ рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ top n рдХреЗ рдмрдЬрд╛рдп offset ... fetch ... ред рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрд╖реНрдардХ рдХреНрдпреЛрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Panache рдХреНрд╡реЗрд░реА рдкрд░ setMaxResults() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЕрдЪреНрдЫрд╛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Panache рдХрд╛ рдХреЛрдИ рд╡реНрдпрд╡рд╕рд╛рдп рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА SQL рдкреАрдврд╝реА рдХрд░ рд░рд╣рд╛ рд╣реИ, рдареАрдХ рд╣реИ @FroMage?

рдЦреИрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд╛рджреЗ рдПрдЪрдЖрд░ рдореЗрдВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ:

select hqlquerypa0_.id as id1_0_, hqlquerypa0_.description as descript2_0_, hqlquerypa0_.name as name3_0_, hqlquerypa0_.type as type4_0_ from Flour hqlquerypa0_ order by hqlquerypa0_.id offset <strong i="6">@P1</strong> rows fetch next <strong i="7">@P2</strong> rows only

рддреЛ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкрдирд╛рдЪреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдореИрдВ рд╕реНрдЯреИрдХ рдореЗрдВ рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪреВрдВрдЧрд╛ред рдЪреВрдВрдХрд┐ рдЯреНрд░реЗрд╕ рд▓реЙрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдПрдХрдорд╛рддреНрд░ рдПрдЪрдХреНрдпреВрдПрд▓ FROM myproject.entities.Request WHERE requestor.firstName LIKE ?1 , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ top(?) рдХрд╛ рдЬреЛрдбрд╝ рдПрдордПрд╕ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ setMaxResults() рд▓рд┐рдП рдЖ рд░рд╣рд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреА рдкреЛрд╕реНрдЯ рдореЗрдВ рдПрд╕рдХреНрдпреВрдПрд▓ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕ рдПрдЪрдХреНрдпреВрдПрд▓ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджреЗрд╢ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛: FROM myproject.entities.Request WHERE requestor.firstName LIKE ?1 ORDER BY submitted

2021-08-05 16:20:37,992 DEBUG [org.hib.hql.int.ast.QueryTranslatorImpl] (vert.x-eventloop-thread-19) HQL: FROM myproject.entities.Request WHERE requestor.firstName LIKE ?1 ORDER BY submitted
2021-08-05 16:20:37,992 DEBUG [org.hib.hql.int.ast.QueryTranslatorImpl] (vert.x-eventloop-thread-19) SQL: select request0_.id as id1_1_, request0_.caseId as caseid2_1_, request0_.caseNumber as casenumb3_1_, request0_.expires as expires4_1_, request0_.addressLine1 as addressl5_1_, request0_.addressLine2 as addressl6_1_, request0_.agency as agency7_1_, request0_.city as city8_1_, request0_.email as email9_1_, request0_.firstName as firstna10_1_, request0_.lastName as lastnam11_1_, request0_.phone as phone12_1_, request0_.relationship as relatio13_1_, request0_.state as state14_1_, request0_.zipcode as zipcode15_1_, request0_.submitted as submitt16_1_ from Request request0_ where request0_.firstName like ? order by request0_.submitted

рдЗрд╕рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд SQL рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛:

2021-08-05 16:20:38,022 DEBUG [org.hib.SQL] (vert.x-eventloop-thread-19)
    select
        request0_.id as id1_1_,
        request0_.caseId as caseid2_1_,
        request0_.caseNumber as casenumb3_1_,
        request0_.expires as expires4_1_,
        request0_.addressLine1 as addressl5_1_,
        request0_.addressLine2 as addressl6_1_,
        request0_.agency as agency7_1_,
        request0_.city as city8_1_,
        request0_.email as email9_1_,
        request0_.firstName as firstna10_1_,
        request0_.lastName as lastnam11_1_,
        request0_.phone as phone12_1_,
        request0_.relationship as relatio13_1_,
        request0_.state as state14_1_,
        request0_.zipcode as zipcode15_1_,
        request0_.submitted as submitt16_1_
    from
        Request request0_
    where
        request0_.firstName like <strong i="10">@P1</strong>
    order by
        request0_.submitted offset 0 rows fetch next ? rows only

рддреЛ ... рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдареАрдХ рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ (рдЕрдм fetch next ? rows only ), рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП SQL рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред

рдЪреВрдВрдХрд┐ рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рдЕрднреА рддрдХ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ-рд░рд┐рдПрдХреНрдЯрд┐рд╡-рдХреЛрд░ 1.0.0.CR9 рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреЛрдо рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ-рдХреЛрд░ 5.5.5.Finalред рдХреНрдпрд╛ рдореБрдЭреЗ рдирд┐рд░реНрднрд░рддрд╛ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ?

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЬрд╣рд╛рдВ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреНрд╡реЗрд░реА Panache io.quarkus.hibernate.reactive.panache.common.runtime.CommonPanache QueryImpl:L254 рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ setFirstResult рдФрд░ setMaxResults рдХреНрд╡реЗрд░реА рдкрд░ред рдореИрдВрдиреЗ рдбреАрдмрдЧрд░ рдореЗрдВ рдХреНрд╡реЗрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдЙрд╕ createQuery рдкрджреНрдзрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд ReactiveQueryImpl рдореЗрдВ queryOptions рд╣реИрдВ рдЬрд┐рдирдореЗрдВ firstRow=0 рдФрд░ maxRows=25 рд╣реИрдВред

рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВ! (рд╕рдордЭреЗрдВ рдХрд┐ рдореИрдВ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рдмрдЧ рдорд┐рд▓рд╛, рд╕рдВрднрд╡рддрдГ SQLServerParameters.processLimit() рдореЗрдВ

Panache firstRow=0 рдХреЗ рд╕рд╛рде рдПрдХ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреНрд╡реЗрд░реА рдмрдирд╛ рд░рд╣рд╛ рд╣реИред

рдЕрдВрджрд░ org.hibernate.reactive.loader.ReactiveLoader.executeReactiveQueryStatement , SQLServer2012LimitHandler.getOffsetFetch() рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

if ( !LimitHelper.hasFirstRow( selection ) ) {
    return " offset 0 rows fetch next ? rows only";
}
return " offset ? rows fetch next ? rows only";

рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ SQL offset 0 rows fetch next ? rows only рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдХреЗ рдмрдЬрд╛рдп 0 рдиреЛрдЯ рдХрд░реЗрдВ?
SQLServerParameters.processLimit() :

        if (isProcessingNotRequired(sql)) {
            return sql;
        }

        // Replace 'offset ? fetch next ? rows only' with the <strong i="17">@P</strong> style parameters for Sql Server
        int index = hasOffset ? parameterArray.length - 1 : parameterArray.length;
        int pos = sql.indexOf( " offset ?" );
        if ( pos > -1 ) {
            String sqlProcessed = sql.substring( 0, pos ) + " offset @P" + index++ + " rows";
            if ( sql.indexOf( " fetch next ?" ) > -1 ) {
                sqlProcessed += " fetch next @P" + index + " rows only ";
            }
            return sqlProcessed;
        }

        return sql;

sql.indexOf( " offset ?") рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдХреНрдпреЛрдВрдХрд┐ LimitHandler рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдСрдлрд╕реЗрдЯ рдХреЛ 0 рдкрд░ рд╣рд╛рд░реНрдб-рдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ offset ? рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореИрдЪ рдХреА рддрд▓рд╛рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП fetch next ? рдХреЗ рд▓рд┐рдП рдореИрдЪ рдХреЗ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рдмрд╛рд╣рд░ offset ?

@ рднрд╛рд░рд╡рд░реНрдб рдпрджрд┐ рдЖрдк рдПрдХ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕ рдкрд░ рднреА рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗ рдЬреЛ рдкреИрдирд╛рдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднрдВрдбрд╛рд░ рдЙрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдпрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдЕрдзрд┐рдХрддрдо рдкрд░рд┐рдгрд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рди рдХрд┐ рдкрд╣рд▓рд╛ рдкрд░рд┐рдгрд╛рдоред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╣реИ: https://github.com/hibernate/hibernate-reactive/blob/ccaa6061fc7e649ee0e1e09b5adda230d39dfe4f/hibernate-reactive-core/src/test/java/org/hibernate/reactive/HQLQueryParameterNamedLimitTest.java#L54

@gavinking рдФрд░ @DavidD - рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдПрдХ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдЬреЛ _both_ setFirstResult(0) рдФрд░ setMaxResults(n) (n рдХреЛрдИ рднреА рдорд╛рди> 0) рдХрд░реЗрдЧрд╛, рдЬреЛ рддреНрд░реБрдЯрд┐ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред

SQLServer2012LimitHandler.getOffsetFetch() firstResult==0 ("рдСрдлрд╝рд╕реЗрдЯ 0 рдкрдВрдХреНрддрд┐рдпреЛрдВ...") рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрд▓рдЧ SQL рдмрдирд╛рддрд╛ рд╣реИ рдЬрдм firstResult >0 ("рдСрдлрд╝рд╕реЗрдЯ? рдкрдВрдХреНрддрд┐рдпрд╛рдБ") рдХреА рддреБрд▓рдирд╛ рдореЗрдВ;

рдпрджрд┐ рдпрд╣ рдЕрднреА рднреА рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛, рддреЛ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдореИрдВ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рддреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдПрдЪрдЖрд░-рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП HQLQueryParameterNamedLimitTest рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред

рдЖрд╣, рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ HQLQueryParameterNamedLimitTest :

    <strong i="7">@Test</strong>
    public void testFirstResultZeroAndMaxResults(TestContext context) {
        test(
                context,
                openSession()
                        .thenCompose( s ->
                                s.createQuery( "from Flour order by id" )
                                        .setFirstResult( 0 )
                                        .setMaxResults( 10 )
                                        .getResultList()
                                        .thenAccept( result -> {
                                            context.assertEquals( 3, result.size() );
                                        } )
                        )
        );
    }

рдореЗрдВ рджреЗрдЦ рд▓реВрдВрдЧрд╛

@DavidD _in рдЕрддрд┐рд░рд┐рдХреНрдд_ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╕реБрдЭрд╛рд╡ рднреА рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ:

       <strong i="7">@Test</strong>
    public void testFirstResultZeroAndMaxResultsWithoutOrderBy(TestContext context) {
        test(
                context,
                openSession()
                        .thenCompose( s ->
                                s.createQuery( "from Flour" )
                                        .setFirstResult( 0 )
                                        .setMaxResults( 10 )
                                        .getResultList()
                                        .thenAccept( result -> {
                                            context.assertEquals( 3, result.size() );
                                        } )
                        )
        );
    }

рдЕрдВрддрд░ "рдЖрджреЗрд╢ рджреНрд╡рд╛рд░рд╛" рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ SQLServer2005LimitHandler рдХреНрд╡реЗрд░реА рдХреЛ select top(?) ... рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬрдм рднреА рдХреНрд╡реЗрд░реА рдореЗрдВ "рдСрд░реНрдбрд░ рдмрд╛рдп" рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдпрд╣ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ offset ? fetch next ? рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 2 рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА!!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

akoufa picture akoufa  ┬╖  30рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

arifpratama398 picture arifpratama398  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gavinking picture gavinking  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Xset-s picture Xset-s  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

DavideD picture DavideD  ┬╖  17рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ