|
18 | 18 | #include <ydb/library/yql/providers/dq/common/yql_dq_settings.h> |
19 | 19 | #include <ydb/library/yql/dq/actors/protos/dq_stats.pb.h> |
20 | 20 | #include <ydb/library/yql/providers/dq/expr_nodes/dqs_expr_nodes.h> |
| 21 | +#include <ydb/library/yql/utils/utf8.h> |
21 | 22 |
|
22 | 23 | #include <ydb/public/lib/ydb_cli/common/format.h> |
23 | 24 |
|
@@ -59,6 +60,11 @@ TString GetNameByReadType(EPlanTableReadType readType) { |
59 | 60 | } |
60 | 61 | } |
61 | 62 |
|
| 63 | +/* remove chars, that break json plan */ |
| 64 | +std::string RemoveForbiddenChars(std::string s) { |
| 65 | + return NYql::IsUtf8(s)? s: "Non-UTF8 string"; |
| 66 | +} |
| 67 | + |
62 | 68 | struct TTableRead { |
63 | 69 | EPlanTableReadType Type = EPlanTableReadType::Unspecified; |
64 | 70 | TVector<TString> LookupBy; |
@@ -668,14 +674,14 @@ class TxPlanSerializer { |
668 | 674 | readInfo.ScanBy.push_back(rangeDescr); |
669 | 675 | } else { |
670 | 676 | rangeDescr << keyPartRange.ColumnName |
671 | | - << " (" << keyPartRange.From << ")"; |
| 677 | + << " (" << RemoveForbiddenChars(keyPartRange.From) << ")"; |
672 | 678 | readInfo.LookupBy.push_back(rangeDescr); |
673 | 679 | } |
674 | 680 | } else { |
675 | 681 | rangeDescr << keyPartRange.ColumnName << " " |
676 | 682 | << (keyPartRange.From.Empty() ? "(" : leftParen) |
677 | | - << (keyPartRange.From.Empty() ? "-∞" : keyPartRange.From) << ", " |
678 | | - << (keyPartRange.To.Empty() ? "+∞" : keyPartRange.To) |
| 683 | + << (keyPartRange.From.Empty() ? "-∞" : RemoveForbiddenChars(keyPartRange.From)) << ", " |
| 684 | + << (keyPartRange.To.Empty() ? "+∞" : RemoveForbiddenChars(keyPartRange.To)) |
679 | 685 | << (keyPartRange.To.Empty() ? ")" : rightParen); |
680 | 686 | readInfo.ScanBy.push_back(rangeDescr); |
681 | 687 | hasRangeScans = true; |
@@ -749,8 +755,8 @@ class TxPlanSerializer { |
749 | 755 | TStringBuilder rangeDesc; |
750 | 756 | rangeDesc << keyColumns[colId] << " " |
751 | 757 | << (from[keyColumns.size()].GetDataText() == "1" ? "[" : "(") |
752 | | - << (from[colId].HaveValue() ? from[colId].GetSimpleValueText() : "-∞") << ", " |
753 | | - << (to[colId].HaveValue() ? to[colId].GetSimpleValueText() : "+∞") |
| 758 | + << (from[colId].HaveValue() ? RemoveForbiddenChars(from[colId].GetSimpleValueText()) : "-∞") << ", " |
| 759 | + << (to[colId].HaveValue() ? RemoveForbiddenChars(to[colId].GetSimpleValueText()) : "+∞") |
754 | 760 | << (to[keyColumns.size()].GetDataText() == "1" ? "]" : ")"); |
755 | 761 |
|
756 | 762 | readInfo.ScanBy.push_back(rangeDesc); |
@@ -1687,8 +1693,8 @@ class TxPlanSerializer { |
1687 | 1693 | TStringBuilder rangeDesc; |
1688 | 1694 | rangeDesc << keyColumns[colId] << " " |
1689 | 1695 | << (from[keyColumns.size()].GetDataText() == "1" ? "[" : "(") |
1690 | | - << (from[colId].HaveValue() ? from[colId].GetSimpleValueText() : "-∞") << ", " |
1691 | | - << (to[colId].HaveValue() ? to[colId].GetSimpleValueText() : "+∞") |
| 1696 | + << (from[colId].HaveValue() ? RemoveForbiddenChars(from[colId].GetSimpleValueText()) : "-∞") << ", " |
| 1697 | + << (to[colId].HaveValue() ? RemoveForbiddenChars(to[colId].GetSimpleValueText()) : "+∞") |
1692 | 1698 | << (to[keyColumns.size()].GetDataText() == "1" ? "]" : ")"); |
1693 | 1699 |
|
1694 | 1700 | readInfo.ScanBy.push_back(rangeDesc); |
@@ -1810,14 +1816,14 @@ class TxPlanSerializer { |
1810 | 1816 | readInfo.ScanBy.push_back(rangeDescr); |
1811 | 1817 | } else { |
1812 | 1818 | rangeDescr << keyPartRange.ColumnName |
1813 | | - << " (" << keyPartRange.From << ")"; |
| 1819 | + << " (" << RemoveForbiddenChars(keyPartRange.From) << ")"; |
1814 | 1820 | readInfo.LookupBy.push_back(rangeDescr); |
1815 | 1821 | } |
1816 | 1822 | } else { |
1817 | 1823 | rangeDescr << keyPartRange.ColumnName << " " |
1818 | 1824 | << (keyPartRange.From.Empty() ? "(" : leftParen) |
1819 | | - << (keyPartRange.From.Empty() ? "-∞" : keyPartRange.From) << ", " |
1820 | | - << (keyPartRange.To.Empty() ? "+∞" : keyPartRange.To) |
| 1825 | + << (keyPartRange.From.Empty() ? "-∞" : RemoveForbiddenChars(keyPartRange.From)) << ", " |
| 1826 | + << (keyPartRange.To.Empty() ? "+∞" : RemoveForbiddenChars(keyPartRange.To)) |
1821 | 1827 | << (keyPartRange.To.Empty() ? ")" : rightParen); |
1822 | 1828 | readInfo.ScanBy.push_back(rangeDescr); |
1823 | 1829 | hasRangeScans = true; |
|
0 commit comments