grammars-v4
grammars-v4 copied to clipboard
Update MySqlParser.g4
The origin mathExpression has bugs when we preprocess complex expressons. for example: if we calculate a expression "100 + 100/2", the result is (100+100)/2. so the mathOperator should have priority. firstly, we should calculate Mul/Div/Mod; finally, we should calculate Add/Sub;
A test for the expression 100 + 100/2 and/or other examples that mix +, -, *, /, ... should be added. There's nothing like it in the examples. The test must have a .tree file of the parse.
05/09-08:00:57 ~/issues/parens/other/sql/mysql/Positive-Technologies
$ trparse examples/*.sql | trxgrep ' //mathOperator/./ancestor::expression' | trtext
CSharp 0 examples/analyze.sql success 0.1286237
CSharp 0 examples/bitrix_queries_cut.sql success 54.7832683
CSharp 0 examples/case_sensitive_sql.sql success 0.3253716
CSharp 0 examples/ddl_alter.sql success 0.8960842
CSharp 0 examples/ddl_create.sql success 2.6123551
CSharp 0 examples/ddl_drop.sql success 0.1446698
CSharp 0 examples/ddl_flush.sql success 0.0501746
CSharp 0 examples/dml_delete.sql success 0.28286
CSharp 0 examples/dml_insert.sql success 0.6796907
CSharp 0 examples/dml_replace.sql success 0.170066
CSharp 0 examples/dml_select.sql success 4.5654083
CSharp 0 examples/dml_test_arithmetic_expression.sql success 0.0100945
CSharp 0 examples/dml_union.sql success 0.7478549
CSharp 0 examples/dml_update.sql success 0.3446768
CSharp 0 examples/dml_with.sql success 0.2009095
CSharp 0 examples/ext_tests.sql success 0.873523
CSharp 0 examples/grant.sql success 0.1269522
CSharp 0 examples/kill.sql success 0.0413537
CSharp 0 examples/mysql_spec_comment.sql success 0.1397344
CSharp 0 examples/optimize.sql success 0.0147603
CSharp 0 examples/smoke_tests.sql success 0.363849
examples/bitrix_queries_cut.sql:UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - 600
examples/bitrix_queries_cut.sql:FROM_UNIXTIME(UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - 600) <= FSTAT.LAST_VISIT
examples/bitrix_queries_cut.sql: (FROM_UNIXTIME(UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - 600) <= FSTAT.LAST_VISIT)
examples/bitrix_queries_cut.sql: 1=1 AND (FSTAT.SITE_ID = 's1') AND (FSTAT.USER_ID = 0 OR U.ACTIVE = 'Y') AND (FROM_UNIXTIME(UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - 600) <= FSTAT.LAST_VISIT)
examples/bitrix_queries_cut.sql: UNIX_TIMESTAMP(MIN(NEXT_EXEC))-UNIX_TIMESTAMP(NOW())
examples/bitrix_queries_cut.sql: ifnull(SHOW_COUNTER, 0) + 1
examples/bitrix_queries_cut.sql: ifnull(SHOW_COUNTER, 0) + 1
examples/bitrix_queries_cut.sql: UNIX_TIMESTAMP(MIN(NEXT_EXEC))-UNIX_TIMESTAMP(NOW())
examples/bitrix_queries_cut.sql: UNIX_TIMESTAMP(MIN(NEXT_EXEC))-UNIX_TIMESTAMP(NOW())
examples/bitrix_queries_cut.sql: UNIX_TIMESTAMP(MIN(NEXT_EXEC))-UNIX_TIMESTAMP(NOW())
examples/bitrix_queries_cut.sql: UNIX_TIMESTAMP(MIN(NEXT_EXEC))-UNIX_TIMESTAMP(NOW())
examples/bitrix_queries_cut.sql: COUNTER+1
examples/bitrix_queries_cut.sql: COUNTER+1
examples/bitrix_queries_cut.sql: COUNTER+1
examples/bitrix_queries_cut.sql: COUNTER+1
examples/bitrix_queries_cut.sql:
UNIX_TIMESTAMP(V.DATE_END) - UNIX_TIMESTAMP(V.DATE_START)
examples/case_sensitive_sql.sql:10-poWeR(3,4)
examples/case_sensitive_sql.sql: aBs(10-poWeR(3,4))
examples/case_sensitive_sql.sql:rAnD()*100
examples/case_sensitive_sql.sql: cEIL(rAnD()*100)
examples/case_sensitive_sql.sql: (sIn(0.5*3.413234) + coS(100 MoD 33)) +lOG(pI()*eXp(AcOS(10)*AtAn(10)))
examples/case_sensitive_sql.sql:sIn(0.5*3.413234) + coS(100 MoD 33)
examples/case_sensitive_sql.sql: (sIn(0.5*3.413234) + coS(100 MoD 33)) +lOG(pI()*eXp(AcOS(10)*AtAn(10)))
examples/case_sensitive_sql.sql:0.5*3.413234
examples/case_sensitive_sql.sql:sIn(0.5*3.413234) + coS(100 MoD 33)
examples/case_sensitive_sql.sql: (sIn(0.5*3.413234) + coS(100 MoD 33)) +lOG(pI()*eXp(AcOS(10)*AtAn(10)))
examples/case_sensitive_sql.sql:100 MoD 33
examples/case_sensitive_sql.sql:sIn(0.5*3.413234) + coS(100 MoD 33)
examples/case_sensitive_sql.sql: (sIn(0.5*3.413234) + coS(100 MoD 33)) +lOG(pI()*eXp(AcOS(10)*AtAn(10)))
examples/case_sensitive_sql.sql:pI()*eXp(AcOS(10)*AtAn(10))
examples/case_sensitive_sql.sql: (sIn(0.5*3.413234) + coS(100 MoD 33)) +lOG(pI()*eXp(AcOS(10)*AtAn(10)))
examples/case_sensitive_sql.sql:AcOS(10)*AtAn(10)
examples/case_sensitive_sql.sql:pI()*eXp(AcOS(10)*AtAn(10))
examples/case_sensitive_sql.sql: (sIn(0.5*3.413234) + coS(100 MoD 33)) +lOG(pI()*eXp(AcOS(10)*AtAn(10)))
examples/ddl_alter.sql:id + 6 > 10
examples/ddl_alter.sql:ID + 6 > 10
examples/ddl_alter.sql: 1c + 1
examples/ddl_create.sql:bin_len * bin_width * bin_height
examples/ddl_create.sql:bin_len * bin_width * bin_height
examples/ddl_create.sql: 1c + 1
examples/ddl_create.sql: old.col1 + 5
examples/ddl_create.sql: old.col1 + 7
examples/ddl_create.sql: i + 1
examples/ddl_create.sql: NEW.badge_student_total + 1
examples/ddl_create.sql: old.col1 + 5
examples/ddl_create.sql: old.col1 + 7
examples/ddl_create.sql: 2 + var1
examples/ddl_create.sql: LastID+1
examples/ddl_create.sql: Tx_Count + VALUES(Tx_Count)
examples/ddl_create.sql: Real_Amount + VALUES(Real_Amount)
examples/ddl_create.sql: Bonus_Amount + VALUES(Bonus_Amount)
examples/ddl_create.sql: Real_Count + VALUES(Real_Count)
examples/ddl_create.sql: Bonus_Count + VALUES(Bonus_Count)
examples/ddl_create.sql: n + 1
examples/dml_delete.sql:col2 - col3 <= (select count(*) from t2)
examples/dml_delete.sql:col2 - col3 <= (select count(*) from t2) or maincol/2 > 100.2
examples/dml_delete.sql: (col2 - col3 <= (select count(*) from t2) or maincol/2 > 100.2)
examples/dml_delete.sql: col1 = true and (col2 - col3 <= (select count(*) from t2) or maincol/2 > 100.2)
examples/dml_delete.sql: maincol/2 > 100.2
examples/dml_delete.sql:col2 - col3 <= (select count(*) from t2) or maincol/2 > 100.2
examples/dml_delete.sql: (col2 - col3 <= (select count(*) from t2) or maincol/2 > 100.2)
examples/dml_delete.sql: col1 = true and (col2 - col3 <= (select count(*) from t2) or maincol/2 > 100.2)
examples/dml_delete.sql: id*2 + somecol < 10
examples/dml_delete.sql: id*2 + somecol < 10
examples/dml_delete.sql: alias_t2.col_onecol + t3.col_for_compare <> t1.sum_col
examples/dml_delete.sql: t1.col1 <= alias_t2.col1 and alias_t2.col_onecol + t3.col_for_compare <> t1.sum_col
examples/dml_insert.sql:col2*2
examples/dml_insert.sql:col1*2
examples/dml_insert.sql:hits+15
examples/dml_insert.sql: new.a+new.b
examples/dml_replace.sql: abs(-10 * col1) + sqrt(col2/col3)
examples/dml_replace.sql:-10 * col1
examples/dml_replace.sql: abs(-10 * col1) + sqrt(col2/col3)
examples/dml_replace.sql:col2/col3
examples/dml_replace.sql: abs(-10 * col1) + sqrt(col2/col3)
examples/dml_update.sql:to_seconds(now()) mod 33
examples/dml_update.sql: (to_seconds(now()) mod 33)
examples/dml_update.sql: `t2`.`***` * 2
examples/dml_update.sql: col1 + 1
examples/dml_update.sql: col1 + 1
examples/dml_update.sql: id + 1
examples/dml_update.sql:ValWithinGroup-baseVal
examples/dml_with.sql: n + 1
examples/ext_tests.sql: 1 = 16/4 between 3 and 5
examples/ext_tests.sql: 1 = 16/4 between 5 and 6
examples/ext_tests.sql: length(str)/2
examples/smoke_tests.sql: 1 = 16/4 between 3 and 5
examples/smoke_tests.sql: 1 = 16/4 between 5 and 6
examples/smoke_tests.sql: length(str)/2
@KvanTTT @kaby76 is this PR ready to merge?
No, my suggestions still remain unfixed.