| 2131 | } |
| 2132 | |
| 2133 | static void print_columns(const struct table_desc *td, const char *indent, |
| 2134 | const char *objsrc) |
| 2135 | { |
| 2136 | for (size_t i = 0; i < tal_count(td->columns); i++) { |
| 2137 | const char *origin; |
| 2138 | if (td->columns[i]->sub) { |
| 2139 | const struct table_desc *subtd = td->columns[i]->sub; |
| 2140 | |
| 2141 | if (!subtd->is_subobject) { |
| 2142 | const char *subindent; |
| 2143 | |
| 2144 | subindent = tal_fmt(tmpctx, "%s ", indent); |
| 2145 | printf("%s- related table `%s`%s\n", |
| 2146 | indent, subtd->name, objsrc); |
| 2147 | printf("%s- `row` (reference to `%s.%s`, sqltype `INTEGER`)\n" |
| 2148 | "%s- `arrindex` (index within array, sqltype `INTEGER`)\n", |
| 2149 | subindent, td->name, primary_key_name(td), |
| 2150 | subindent); |
| 2151 | print_columns(subtd, subindent, ""); |
| 2152 | } else { |
| 2153 | const char *subobjsrc; |
| 2154 | |
| 2155 | subobjsrc = tal_fmt(tmpctx, |
| 2156 | ", from JSON object `%s%s`", |
| 2157 | json_prefix(tmpctx, td), |
| 2158 | td->columns[i]->jsonname); |
| 2159 | print_columns(subtd, indent, subobjsrc); |
| 2160 | } |
| 2161 | continue; |
| 2162 | } |
| 2163 | |
| 2164 | if (streq(objsrc, "") |
| 2165 | && td->columns[i]->jsonname |
| 2166 | && !streq(td->columns[i]->dbname, td->columns[i]->jsonname)) { |
| 2167 | origin = tal_fmt(tmpctx, ", from JSON field `%s%s`", |
| 2168 | json_prefix(tmpctx, td), |
| 2169 | td->columns[i]->jsonname); |
| 2170 | } else |
| 2171 | origin = ""; |
| 2172 | printf("%s- `%s` (type `%s`, sqltype `%s%s`%s%s)\n", |
| 2173 | indent, td->columns[i]->dbname, |
| 2174 | fieldtypemap[td->columns[i]->ftype].name, |
| 2175 | fieldtypemap[td->columns[i]->ftype].sqltype, |
| 2176 | streq(td->columns[i]->dbname, "created_index") |
| 2177 | ? " PRIMARY KEY" : "", |
| 2178 | origin, objsrc); |
| 2179 | } |
| 2180 | } |
| 2181 | |
| 2182 | static bool print_one_table(const char *member, |
| 2183 | struct table_desc *td, |
no test coverage detected