Hi Paul, It appears you may not be subscribed to the mailing list so you did not receive Matt’s reply one hour after your message. Please subscribe to the list to avoid this in the future.
You can also read the message here: https://lists.apache.org/thread.html/re6ad565d566f57a2d76e3707044d08216a1da581206ddf87abe4d2b5%40%3Cdev.nifi.apache.org%3E Andy LoPresto [email protected] [email protected] He/Him PGP Fingerprint: 70EC B3E5 98A6 5A3F D3C4 BACE 3C6E F65B 2F7D EF69 > On Oct 8, 2020, at 7:46 PM, 杨量(上海-技术部-开发) <[email protected]> wrote: > > HI, Team > Could you give me some feedback? > Thanks > Paul > ---------- > [mailto:[email protected]] > : 2020年10月7日 20:29 > : [email protected] > : Re: CaptureChangeMySQL processor capture maybe wrong when updating more > than one table in join statement > > HI, Team > I think it should be a bug. Could you plan to fix it or could I register a > bug for it? > The wrong issue can be reproduce with 1.9.*, 1.11.4 of NIFI version. > The mysql version is 5.7.20-log MySQL Community Server (GPL) Wrong behavior > cause by TABLE_MAP event just got the last one table is the currentTable. > It should be a map of tableinfo between BEGIN and COMMIT envent. > When update more table by join statement. > E.g. the sql statement is: > UPDATE a a inner join b b m a.id=b.id > left join c c on a.id=c.id > set a.name='y' > ,b.name='x' > ,c. name='z'; > The binlog event like belows: > BEGIN > TABLE_MAP a > TABLE_MAP b > TABLE_MAP c > Update_rows a > Update_rows b > Update_rows c > COMMIT > For current codes: The java object currentTable capture the TABLE_MAP c > event, so, All three update events are resolved to the last table c. > Can you look at this issue? > > BR > Paul Yang > > > ----- ----- > [mailto:[email protected]] > 2020-9-30 9:56 > [email protected] > CaptureChangeMySQL processor capture maybe wrong when updating more than one > table in join statement > > Hi, Team > > I'm working on CaptureChangeMySQL processor with nifi version 1.11.4. I just > capture update event of one table when updating more than one table in join > statement. > The CaptureChangeMySQL behavior is wrong, maybe is a bug. The reason is the > below code: cannot got the correctly table info when multi Table_map event > happened. > The currentTable should be the latest Table_map , so the follow binlog parser > is going to wrong table name, the table_name is wrong in json. > > Is this a known limitation? Could you fix if it is a bug. > > case TABLE_MAP: > // This is sent to inform which table is about to be > changed by subsequent events > TableMapEventData data = event.getData(); > > ...... > > if (!skipTable) { > TableInfoCacheKey key = new > TableInfoCacheKey(this.getIdentifier(), data.getDatabase(), data.getTable(), > data.getTableId()); > if (cacheClient != null) { > try { > currentTable = cacheClient.get(key, > cacheKeySerializer, cacheValueDeserializer); > > The belows is my sql. > > # UPDATE wdk_sub_orders_drf5089_9 s > # inner join wdk_main_order_drf5089 m on > m.main_order_id=s.main_order_id > # left join wdk_sub_order_mc_drf5089 ms on > ms.sub_order_id=s.sub_order_id > # left join wdk_order_promotion_info_drf5089 p on > p.sub_order_id=s.sub_order_id > # set > # s.merchant_id='3' > # , s.merchant_store_id=1 > # , s.store_sales_type=m.store_sales_type > # , s.store_channel_id=2 > # , s.presell_type=m.order_type > # , ms.store_sales_type=m.store_sales_type > # , ms.order_type=3 > # , p.store_sales_type=4 > # , p.presell_type=m.order_type > # where > # s.id between 100382538 and 100382539 and s.source=1 and > s.merchant_id='2' > Retrieve All Records: false > Include DDL Events: false > > I got the binlog like belows: > > > #200930 8:46:19 server id 100 end_log_pos 29660 CRC32 0x1e9b0378 > Table_map: `test`.`wdk_sub_orders_drf5089_9` mapped to number 219 > # at 29660 > #200930 8:46:19 server id 100 end_log_pos 29762 CRC32 0xfac7a7b0 > Table_map: `test`.`wdk_sub_order_mc_drf5089` mapped to number 221 > # at 29762 > #200930 8:46:19 server id 100 end_log_pos 29882 CRC32 0x8b437c40 > Table_map: `test`.`wdk_order_promotion_info_drf5089` mapped to number 222 > # at 29882 > #200930 8:46:19 server id 100 end_log_pos 30470 CRC32 0x3e0a2dab > Update_rows: table id 219 > # at 30470 > #200930 8:46:19 server id 100 end_log_pos 30776 CRC32 0x4335186c > Update_rows: table id 221 > # at 30776 > #200930 8:46:19 server id 100 end_log_pos 30959 CRC32 0x8153af67 > Update_rows: table id 222 flags: STMT_END_F > ### UPDATE `test`.`wdk_sub_orders_drf5089_9` ### WHERE > ### @1=100382538 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @2=1 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @3=1 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @4=1 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @5=1 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @6=1 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @7=1 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @8='1' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @9=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @10=-1 (18446744073709551615) /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @11=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @12=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @13=-1 (4294967295) /* INT meta=0 nullable=0 is_null=0 */ > ### @14='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @15='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @16='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @17='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @18='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @19=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @20='2020-09-29 18:08:30' /* DATETIME(0) meta=0 nullable=0 is_null=0 */ > ### @21='2020-09-29 18:08:30' /* DATETIME(0) meta=0 nullable=0 is_null=0 */ > ### @22='1' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @23=0 /* INT meta=0 nullable=0 is_null=0 */ > ### @24=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @25=0 /* SHORTINT meta=0 nullable=0 is_null=0 */ > ### @26=0 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @27=0 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @28=0.00 /* DECIMAL(15,2) meta=3842 nullable=0 is_null=0 */ > ### @29=0 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @30='' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */ > ### @31='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @32=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @33=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @34='' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */ > ### @35=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @36=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @37=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @38='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @39='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @40='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @41=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @42=0 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @43=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @44=0.000 /* DECIMAL(11,3) meta=2819 nullable=0 is_null=0 */ > ### @45=0 /* SHORTINT meta=0 nullable=0 is_null=0 */ > ### @46=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @47='' /* VARSTRING(300) meta=300 nullable=0 is_null=0 */ > ### @48=1 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @49='' /* VARSTRING(96) meta=96 nullable=0 is_null=0 */ > ### @50=0.000 /* DECIMAL(11,3) meta=2819 nullable=0 is_null=0 */ > ### @51='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @52='' /* VARSTRING(150) meta=150 nullable=0 is_null=0 */ > ### @53=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @54='' /* VARSTRING(3000) meta=3000 nullable=0 is_null=0 */ > ### @55=1 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @56=0 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @57='' /* VARSTRING(96) meta=96 nullable=0 is_null=0 */ > ### @58=0 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @59=1 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @60='2' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @61='1' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @62='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @63='1' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @64=1 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @65=1 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### SET > ### @1=100382538 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @2=1 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @3=1 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @4=1 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @5=1 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @6=1 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @7=1 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @8='1' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @9=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @10=-1 (18446744073709551615) /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @11=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @12=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @13=-1 (4294967295) /* INT meta=0 nullable=0 is_null=0 */ > ### @14='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @15='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @16='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @17='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @18='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @19=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @20='2020-09-29 18:08:30' /* DATETIME(0) meta=0 nullable=0 is_null=0 */ > ### @21='2020-09-29 18:08:30' /* DATETIME(0) meta=0 nullable=0 is_null=0 */ > ### @22='1' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @23=0 /* INT meta=0 nullable=0 is_null=0 */ > ### @24=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @25=0 /* SHORTINT meta=0 nullable=0 is_null=0 */ > ### @26=0 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @27=0 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @28=0.00 /* DECIMAL(15,2) meta=3842 nullable=0 is_null=0 */ > ### @29=0 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @30='' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */ > ### @31='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @32=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @33=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @34='' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */ > ### @35=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @36=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @37=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @38='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @39='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @40='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @41=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @42=0 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @43=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @44=0.000 /* DECIMAL(11,3) meta=2819 nullable=0 is_null=0 */ > ### @45=0 /* SHORTINT meta=0 nullable=0 is_null=0 */ > ### @46=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @47='' /* VARSTRING(300) meta=300 nullable=0 is_null=0 */ > ### @48=1 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @49='' /* VARSTRING(96) meta=96 nullable=0 is_null=0 */ > ### @50=0.000 /* DECIMAL(11,3) meta=2819 nullable=0 is_null=0 */ > ### @51='' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @52='' /* VARSTRING(150) meta=150 nullable=0 is_null=0 */ > ### @53=0 /* LONGINT meta=0 nullable=0 is_null=0 */ > ### @54='' /* VARSTRING(3000) meta=3000 nullable=0 is_null=0 */ > ### @55=1 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @56=0 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @57='' /* VARSTRING(96) meta=96 nullable=0 is_null=0 */ > ### @58=0 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @59=1 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @60='3' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @61='1' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @62='10' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @63='2' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ > ### @64=1 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### @65=1 /* TINYINT meta=0 nullable=0 is_null=0 */ > ### UPDATE `test`.`wdk_sub_order_mc_drf5089` ### WHERE > ### @1=30735 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @2='' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */ > ### @3=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @4=1 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @5=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @6=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @7=0.000 /* DECIMAL(11,3) meta=2819 nullable=1 is_null=0 */ > ### @8=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @9=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @10=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @11=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @12=0 /* TINYINT meta=0 nullable=1 is_null=0 */ > ### @13=0.0000 /* DECIMAL(10,4) meta=2564 nullable=1 is_null=0 */ > ### @14=1601374464 /* TIMESTAMP(0) meta=0 nullable=1 is_null=0 */ > ### @15=1601374464 /* TIMESTAMP(0) meta=0 nullable=1 is_null=0 */ > ### @16='' /* VARSTRING(1536) meta=1536 nullable=1 is_null=0 */ > ### @17=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @18=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @19=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @20=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @21=1 /* TINYINT meta=0 nullable=1 is_null=0 */ > ### @22='' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### SET > ### @1=30735 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @2='' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */ > ### @3=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @4=1 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @5=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @6=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @7=0.000 /* DECIMAL(11,3) meta=2819 nullable=1 is_null=0 */ > ### @8=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @9=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @10=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @11=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @12=0 /* TINYINT meta=0 nullable=1 is_null=0 */ > ### @13=0.0000 /* DECIMAL(10,4) meta=2564 nullable=1 is_null=0 */ > ### @14=1601374464 /* TIMESTAMP(0) meta=0 nullable=1 is_null=0 */ > ### @15=1601426779 /* TIMESTAMP(0) meta=0 nullable=1 is_null=0 */ > ### @16='' /* VARSTRING(1536) meta=1536 nullable=1 is_null=0 */ > ### @17=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @18=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @19=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @20=0 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @21=3 /* TINYINT meta=0 nullable=1 is_null=0 */ > ### @22='10' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### UPDATE `test`.`wdk_order_promotion_info_drf5089` > ### WHERE > ### @1=4675456 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @2='1' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### @3=1 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @4=1 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @5=1 /* TINYINT meta=0 nullable=1 is_null=0 */ > ### @6=0 /* INT meta=0 nullable=1 is_null=0 */ > ### @7=0 /* INT meta=0 nullable=1 is_null=0 */ > ### @8=-1 (4294967295) /* INT meta=0 nullable=1 is_null=0 */ > ### @9='' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### @10='' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### @11='' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### @12=0 /* INT meta=0 nullable=1 is_null=0 */ > ### @13='' /* VARSTRING(3072) meta=3072 nullable=1 is_null=0 */ > ### @14='2020-09-29 18:16:23' /* DATETIME(0) meta=0 nullable=1 is_null=0 */ > ### @15='2020-09-29 18:16:23' /* DATETIME(0) meta=0 nullable=1 is_null=0 */ > ### @16='1' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### @17='' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### @18='' /* VARSTRING(600) meta=600 nullable=1 is_null=0 */ > ### @19='' /* VARSTRING(3000) meta=3000 nullable=1 is_null=0 */ > ### @20=0 /* TINYINT meta=0 nullable=1 is_null=0 */ > ### @21=1 /* TINYINT meta=0 nullable=1 is_null=0 */ > ### @22='' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### SET > ### @1=4675456 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @2='1' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### @3=1 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @4=1 /* LONGINT meta=0 nullable=1 is_null=0 */ > ### @5=1 /* TINYINT meta=0 nullable=1 is_null=0 */ > ### @6=0 /* INT meta=0 nullable=1 is_null=0 */ > ### @7=0 /* INT meta=0 nullable=1 is_null=0 */ > ### @8=-1 (4294967295) /* INT meta=0 nullable=1 is_null=0 */ > ### @9='' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### @10='' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### @11='' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### @12=0 /* INT meta=0 nullable=1 is_null=0 */ > ### @13='' /* VARSTRING(3072) meta=3072 nullable=1 is_null=0 */ > ### @14='2020-09-29 18:16:23' /* DATETIME(0) meta=0 nullable=1 is_null=0 */ > ### @15='2020-09-29 18:16:23' /* DATETIME(0) meta=0 nullable=1 is_null=0 */ > ### @16='1' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### @17='' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > ### @18='' /* VARSTRING(600) meta=600 nullable=1 is_null=0 */ > ### @19='' /* VARSTRING(3000) meta=3000 nullable=1 is_null=0 */ > ### @20=0 /* TINYINT meta=0 nullable=1 is_null=0 */ > ### @21=1 /* TINYINT meta=0 nullable=1 is_null=0 */ > ### @22='4' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */ > # at 30959 > #200930 8:46:19 server id 100 end_log_pos 30990 CRC32 0x496fe17f Xid = > 28836 > COMMIT/*!*/; > SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; > DELIMITER ; # End of log file > /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; > /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/; > > > > > Thanks! > > Paul Yang
