| 287 | } // end of ColumnType |
| 288 | |
| 289 | public Object ColumnDesc(Object obj, int n, int[] val, int lvl) { |
| 290 | Object ret = null; |
| 291 | BsonValue bval = (BsonValue) ((obj != null) ? obj : doc); |
| 292 | BsonDocument dob = (bval instanceof BsonDocument) ? (BsonDocument) bval : null; |
| 293 | BsonArray ary = (bval instanceof BsonArray) ? (BsonArray) bval : null; |
| 294 | |
| 295 | try { |
| 296 | if (ary != null) { |
| 297 | bval = ary.get(n); |
| 298 | bvalName = Integer.toString(n); |
| 299 | } else if (dob != null) { |
| 300 | // String[] k = dob.keySet().toArray(new String[0]); |
| 301 | Object[] k = dob.keySet().toArray(); |
| 302 | bval = dob.get(k[n]); |
| 303 | bvalName = (String) k[n]; |
| 304 | } else |
| 305 | bvalName = "x" + Integer.toString(n); |
| 306 | |
| 307 | val[0] = 0; // ColumnType |
| 308 | val[1] = 0; // Precision |
| 309 | val[2] = 0; // Scale |
| 310 | val[3] = 0; // Nullable |
| 311 | val[4] = 0; // ncol |
| 312 | |
| 313 | if (bval.isString()) { |
| 314 | val[0] = 1; |
| 315 | val[1] = bval.asString().getValue().length(); |
| 316 | } else if (bval.isInt32()) { |
| 317 | val[0] = 7; |
| 318 | val[1] = Integer.toString(bval.asInt32().getValue()).length(); |
| 319 | } else if (bval.isInt64()) { |
| 320 | val[0] = 5; |
| 321 | val[1] = Long.toString(bval.asInt64().getValue()).length(); |
| 322 | } else if (bval.isObjectId()) { |
| 323 | val[0] = 1; |
| 324 | val[1] = bval.asObjectId().getValue().toString().length(); |
| 325 | } else if (bval.isDateTime()) { |
| 326 | Long TS = (bval.asDateTime().getValue() / 1000); |
| 327 | val[0] = 8; |
| 328 | val[1] = TS.toString().length(); |
| 329 | } else if (bval.isDouble()) { |
| 330 | String d = Double.toString(bval.asDouble().getValue()); |
| 331 | int i = d.indexOf('.') + 1; |
| 332 | |
| 333 | val[0] = 2; |
| 334 | val[1] = d.length(); |
| 335 | val[2] = (i > 0) ? val[1] - i : 0; |
| 336 | } else if (bval.isBoolean()) { |
| 337 | val[0] = 4; |
| 338 | val[1] = 1; |
| 339 | } else if (bval.isDocument()) { |
| 340 | if (lvl > 0) { |
| 341 | ret = bval; |
| 342 | val[0] = 1; |
| 343 | val[4] = bval.asDocument().keySet().size(); |
| 344 | } else if (lvl == 0) { |
| 345 | val[0] = 1; |
| 346 | val[1] = bval.asDocument().toJson().length(); |