| 65 | ::fedb::sdk::SQLClusterRouter *sr = NULL; |
| 66 | |
| 67 | void PrintResultSet(std::ostream &stream, ::hybridse::sdk::ResultSet *result_set) { |
| 68 | if (!result_set || result_set->Size() == 0) { |
| 69 | stream << "Empty set" << std::endl; |
| 70 | return; |
| 71 | } |
| 72 | ::hybridse::base::TextTable t('-', ' ', ' '); |
| 73 | auto *schema = result_set->GetSchema(); |
| 74 | // Add Header |
| 75 | for (int32_t i = 0; i < schema->GetColumnCnt(); i++) { |
| 76 | t.add(schema->GetColumnName(i)); |
| 77 | } |
| 78 | t.end_of_row(); |
| 79 | while (result_set->Next()) { |
| 80 | for (int32_t i = 0; i < schema->GetColumnCnt(); i++) { |
| 81 | if (result_set->IsNULL(i)) { |
| 82 | t.add("NULL"); |
| 83 | continue; |
| 84 | } |
| 85 | auto data_type = schema->GetColumnType(i); |
| 86 | switch (data_type) { |
| 87 | case hybridse::sdk::kTypeInt16: { |
| 88 | int16_t value = 0; |
| 89 | result_set->GetInt16(i, &value); |
| 90 | t.add(std::to_string(value)); |
| 91 | break; |
| 92 | } |
| 93 | case hybridse::sdk::kTypeInt32: { |
| 94 | int32_t value = 0; |
| 95 | result_set->GetInt32(i, &value); |
| 96 | t.add(std::to_string(value)); |
| 97 | break; |
| 98 | } |
| 99 | case hybridse::sdk::kTypeInt64: { |
| 100 | int64_t value = 0; |
| 101 | result_set->GetInt64(i, &value); |
| 102 | t.add(std::to_string(value)); |
| 103 | break; |
| 104 | } |
| 105 | case hybridse::sdk::kTypeFloat: { |
| 106 | float value = 0; |
| 107 | result_set->GetFloat(i, &value); |
| 108 | t.add(std::to_string(value)); |
| 109 | break; |
| 110 | } |
| 111 | case hybridse::sdk::kTypeDouble: { |
| 112 | double value = 0; |
| 113 | result_set->GetDouble(i, &value); |
| 114 | t.add(std::to_string(value)); |
| 115 | break; |
| 116 | } |
| 117 | case hybridse::sdk::kTypeString: { |
| 118 | std::string val; |
| 119 | result_set->GetString(i, &val); |
| 120 | t.add(val); |
| 121 | break; |
| 122 | } |
| 123 | case hybridse::sdk::kTypeTimestamp: { |
| 124 | int64_t ts = 0; |