55import java .util .HashSet ;
66import java .util .Map ;
77import java .util .Set ;
8+ import java .util .function .Supplier ;
89
910import com .fasterxml .jackson .databind .JsonNode ;
1011import com .fasterxml .jackson .databind .ObjectMapper ;
@@ -35,9 +36,9 @@ public class CdcMsgParser {
3536 private final YqlQuery updateQuery ;
3637 private final YqlQuery deleteQuery ;
3738
38- private CdcMsgParser (YqlQuery updateQuery , YqlQuery deleteQuery ) {
39- this .updateQuery = updateQuery ;
40- this .deleteQuery = deleteQuery ;
39+ private CdcMsgParser (Supplier < YqlQuery > updateQuery , Supplier < YqlQuery > deleteQuery ) {
40+ this .updateQuery = updateQuery . get () ;
41+ this .deleteQuery = deleteQuery . get () ;
4142 }
4243
4344 public YqlQuery parseJsonMessage (byte [] json ) throws IOException {
@@ -80,7 +81,8 @@ public YqlQuery parseJsonMessage(byte[] json) throws IOException {
8081 return null ;
8182 }
8283
83- public static Result <CdcMsgParser > parse (YdbService ydb , Map <String , XmlConfig .Query > queries , XmlConfig .Cdc cdc ) {
84+ public static Result <Supplier <CdcMsgParser >> parseConfig (YdbService ydb ,
85+ Map <String , XmlConfig .Query > queries , XmlConfig .Cdc cdc ) {
8486 return new Parser (ydb , cdc , queries ).parse ();
8587 }
8688
@@ -95,7 +97,7 @@ public Parser(YdbService ydb, XmlConfig.Cdc cdc, Map<String, XmlConfig.Query> xm
9597 this .xmlQueries = xmlQueries ;
9698 }
9799
98- public Result <CdcMsgParser > parse () {
100+ public Result <Supplier < CdcMsgParser > > parse () {
99101 String changefeed = ydb .expandPath (cdc .getChangefeed ());
100102
101103 int index = changefeed .lastIndexOf ("/" );
@@ -112,20 +114,20 @@ public Result<CdcMsgParser> parse() {
112114 }
113115 TableDescription description = descRes .getValue ();
114116
115- Result <YqlQuery > updateQuery = findUpdateQuery (description );
117+ Result <Supplier < YqlQuery > > updateQuery = findUpdateQuery (description );
116118 if (!updateQuery .isSuccess ()) {
117119 return updateQuery .map (null );
118120 }
119121
120- Result <YqlQuery > deleteQuery = findDeleteQuery (description );
122+ Result <Supplier < YqlQuery > > deleteQuery = findDeleteQuery (description );
121123 if (!deleteQuery .isSuccess ()) {
122124 return deleteQuery .map (null );
123125 }
124126
125- return Result .success (new CdcMsgParser (updateQuery .getValue (), deleteQuery .getValue ()));
127+ return Result .success (() -> new CdcMsgParser (updateQuery .getValue (), deleteQuery .getValue ()));
126128 }
127129
128- private Result <YqlQuery > findUpdateQuery (TableDescription source ) {
130+ private Result <Supplier < YqlQuery > > findUpdateQuery (TableDescription source ) {
129131 if (cdc .getQuery () != null && !cdc .getQuery ().trim ().isEmpty ()) {
130132 return validate (source , cdc .getQuery ().trim (), false );
131133 }
@@ -140,7 +142,7 @@ private Result<YqlQuery> findUpdateQuery(TableDescription source) {
140142 return Result .success (YqlQuery .skipMessages ("update" , "updateQueryId" , source .getPrimaryKeys (), cdc ));
141143 }
142144
143- private Result <YqlQuery > findDeleteQuery (TableDescription source ) {
145+ private Result <Supplier < YqlQuery > > findDeleteQuery (TableDescription source ) {
144146 String queryId = cdc .getDeleteQueryId ();
145147 if (queryId != null && xmlQueries .containsKey (queryId )) {
146148 XmlConfig .Query query = xmlQueries .get (queryId );
@@ -152,7 +154,7 @@ private Result<YqlQuery> findDeleteQuery(TableDescription source) {
152154 return Result .success (YqlQuery .skipMessages ("erase" , "deleteQueryId" , source .getPrimaryKeys (), cdc ));
153155 }
154156
155- private Result <YqlQuery > validate (TableDescription source , String query , boolean keysOnly ) {
157+ private Result <Supplier < YqlQuery > > validate (TableDescription source , String query , boolean keysOnly ) {
156158 Result <DataQuery > parsed = ydb .parseQuery (query );
157159 if (!parsed .isSuccess ()) {
158160 logger .error ("Can't parse query for consumer {}, got status {}" , cdc .getConsumer (), parsed .getStatus ());
0 commit comments