| 593 | } |
| 594 | |
| 595 | void dump_sql_event(cson_value *event) { |
| 596 | cson_object *obj; |
| 597 | |
| 598 | cson_value_fetch_object(event, &obj); |
| 599 | cson_value *params_obj = cson_object_get(obj, "bound_parameters"); |
| 600 | if (params_obj != nullptr) { |
| 601 | cson_array *params = cson_value_get_array(params_obj); |
| 602 | for (int i = 0; i < cson_array_length_get(params); i++) { |
| 603 | cson_value *v = cson_array_get(params, i); |
| 604 | if (!cson_value_is_object(v)) { |
| 605 | fprintf(stderr, "Unexpected bound parameter type\n"); |
| 606 | } |
| 607 | dump_param(v); |
| 608 | } |
| 609 | } |
| 610 | cson_value *sqlval = cson_object_get(obj, "sql"); |
| 611 | if (sqlval == nullptr) { |
| 612 | fprintf(stderr, ">No sql statement in sql event?\n"); |
| 613 | return; |
| 614 | } |
| 615 | if (!cson_value_is_string(sqlval)) { |
| 616 | fprintf(stderr, ">Unexpected type of sql member in sql event?\n"); |
| 617 | return; |
| 618 | } |
| 619 | char *sqlptr = cson_value_get_string(sqlval); |
| 620 | std::string sql(sqlptr); |
| 621 | std::replace(sql.begin(), sql.end(), '\n', ' '); |
| 622 | std::replace(sql.begin(), sql.end(), '\r', ' '); |
| 623 | printf("tranid 0 %s", sql.c_str()); |
| 624 | } |
| 625 | |
| 626 | void replay(cdb2_hndl_tp *db, cson_value *event_val) { |
| 627 | const char *sql = get_strprop(event_val, "sql"); |
no test coverage detected