Changeset: 473ebe198055 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=473ebe198055
Modified Files:
sql/backends/monet5/vaults/lidar/lidar.c
Branch: data-vaults
Log Message:
[LiDAR] Prepare precision columns in preparation for decimal loading
diffs (138 lines):
diff --git a/sql/backends/monet5/vaults/lidar/lidar.c
b/sql/backends/monet5/vaults/lidar/lidar.c
--- a/sql/backends/monet5/vaults/lidar/lidar.c
+++ b/sql/backends/monet5/vaults/lidar/lidar.c
@@ -263,6 +263,9 @@ LIDARinitCatalog(mvc *m)
mvc_create_column_(m, lidar_col, "MaxX", "double", 64);
mvc_create_column_(m, lidar_col, "MaxY", "double", 64);
mvc_create_column_(m, lidar_col, "MaxZ", "double", 64);
+ mvc_create_column_(m, lidar_col, "PrecisionX", "int", 16);
+ mvc_create_column_(m, lidar_col, "PrecisionY", "int", 16);
+ mvc_create_column_(m, lidar_col, "PrecisionZ", "int", 16);
}
}
@@ -720,8 +723,8 @@ str LIDARattach(Client cntxt, MalBlkPtr
int cnum;
lidar_header *header;
struct stat buf;
- int decimal_digitsX, decimal_digitsY, decimal_digitsZ;
- int total_digitsX, total_digitsY, total_digitsZ;
+ int scaleX, scaleY, scaleZ;
+ int precisionX, precisionY, precisionZ;
if (pci->argc == 3) {
tname = *getArgReference_str(stk, pci, 2);
@@ -784,10 +787,6 @@ str LIDARattach(Client cntxt, MalBlkPtr
col = mvc_bind_column(m, lidar_fl, "name");
rid = table_funcs.column_find_row(m->session->tr, col, fname, NULL);
if (rid != oid_nil) {
- /* MT_lock_set(&mt_lidar_lock); */
- /* if (header != NULL) LASHeader_Destroy(header); */
- /* if (reader != NULL) LASReader_Destroy(reader); */
- /* MT_lock_unset(&mt_lidar_lock); */
msg = createException(SQL, "lidar.attach", "File %s already
attached\n", fname);
return msg;
}
@@ -835,14 +834,37 @@ str LIDARattach(Client cntxt, MalBlkPtr
/* or as regular SQL table */
tbl = mvc_bind_table(m, sch, tname_low);
if (rid != oid_nil || tbl) {
- /* MT_lock_set(&mt_lidar_lock); */
- /* if (header != NULL) LASHeader_Destroy(header); */
- /* if (reader != NULL) LASReader_Destroy(reader); */
- /* MT_lock_unset(&mt_lidar_lock); */
msg = createException(SQL, "lidar.attach", "Table %s already
exists\n", tname_low);
return msg;
}
+ scaleX = (int)ceil(-log(header->hi->scaleX)/log(10));
+ scaleY = (int)ceil(-log(header->hi->scaleY)/log(10));
+ scaleZ = (int)ceil(-log(header->hi->scaleZ)/log(10));
+
+ precisionX = scaleX + (int)ceil(log(header->hi->maxX)/log(10));
+ precisionY = scaleY + (int)ceil(log(header->hi->maxY)/log(10));
+ precisionZ = scaleZ + (int)ceil(log(header->hi->maxZ)/log(10));
+
+#ifndef NDEBUG
+ fprintf(stderr, "Scale: %f %f %f\n",
+ header->hi->scaleX,
+ header->hi->scaleY,
+ header->hi->scaleZ);
+ fprintf(stderr, "Decimal type scale: %d %d %d\n",
+ (int)ceil(-log(header->hi->scaleX)/log(10)),
+ (int)ceil(-log(header->hi->scaleY)/log(10)),
+ (int)ceil(-log(header->hi->scaleZ)/log(10)));
+
+ fprintf(stderr, "Decimal type precision: %d %d %d\n",
+ (int)ceil(log(header->hi->maxX)/log(10)),
+ (int)ceil(log(header->hi->maxY)/log(10)),
+ (int)ceil(log(header->hi->maxZ)/log(10)));
+
+ fprintf(stderr, "decimal digits: %d %d %d\n", scaleX, scaleY, scaleZ);
+ fprintf(stderr, "total digits: %d %d %d\n", precisionX, precisionY,
precisionZ);
+#endif
+
/* store data */
store_funcs.append_col(m->session->tr,
mvc_bind_column(m,
lidar_tbl, "id"), &tid, TYPE_int);
@@ -919,6 +941,12 @@ str LIDARattach(Client cntxt, MalBlkPtr
mvc_bind_column(m,
lidar_col, "MaxY"), &header->hi->maxY, TYPE_dbl);
store_funcs.append_col(m->session->tr,
mvc_bind_column(m,
lidar_col, "MaxZ"), &header->hi->maxZ, TYPE_dbl);
+ store_funcs.append_col(m->session->tr,
+ mvc_bind_column(m,
lidar_col, "PrecisionX"), &precisionX, TYPE_int);
+ store_funcs.append_col(m->session->tr,
+ mvc_bind_column(m,
lidar_col, "PrecisionY"), &precisionY, TYPE_int);
+ store_funcs.append_col(m->session->tr,
+ mvc_bind_column(m,
lidar_col, "PrecisionZ"), &precisionZ, TYPE_int);
/* add a lidar_column tuple */
col = mvc_bind_column(m, lidar_col, "id");
@@ -926,44 +954,14 @@ str LIDARattach(Client cntxt, MalBlkPtr
/* create an SQL table to hold the LIDAR table */
cnum = 3;//x, y, z. TODO: Add all available columnt
tbl = mvc_create_table(m, sch, tname_low, tt_table, 0, SQL_PERSIST, 0,
cnum);
- /* mvc_create_column_(m, tbl, "x", "double", 64); */
- /* mvc_create_column_(m, tbl, "y", "double", 64); */
- /* mvc_create_column_(m, tbl, "z", "double", 64); */
- decimal_digitsX = (int)ceil(-log(header->hi->scaleX)/log(10));
- decimal_digitsY = (int)ceil(-log(header->hi->scaleY)/log(10));
- decimal_digitsZ = (int)ceil(-log(header->hi->scaleZ)/log(10));
-
- total_digitsX = decimal_digitsX +
(int)ceil(log(header->hi->maxX)/log(10));
- total_digitsY = decimal_digitsY +
(int)ceil(log(header->hi->maxY)/log(10));
- total_digitsZ = decimal_digitsZ +
(int)ceil(log(header->hi->maxZ)/log(10));
-
-#ifndef NDEBUG
- fprintf(stderr, "Scale: %f %f %f\n",
- header->hi->scaleX,
- header->hi->scaleY,
- header->hi->scaleZ);
- fprintf(stderr, "Number of decimal digits %d %d %d\n",
- (int)ceil(-log(header->hi->scaleX)/log(10)),
- (int)ceil(-log(header->hi->scaleY)/log(10)),
- (int)ceil(-log(header->hi->scaleZ)/log(10)));
-
- fprintf(stderr, "Number of digits %d %d %d\n",
- (int)ceil(log(header->hi->maxX)/log(10)),
- (int)ceil(log(header->hi->maxY)/log(10)),
- (int)ceil(log(header->hi->maxZ)/log(10)));
-
- fprintf(stderr, "decimal digits: %d %d %d\n", decimal_digitsX,
decimal_digitsY, decimal_digitsZ);
- fprintf(stderr, "total digits: %d %d %d\n", total_digitsX,
total_digitsY, total_digitsZ);
-#endif
-
- sql_find_subtype(&t, "decimal", total_digitsX, decimal_digitsX);
+ sql_find_subtype(&t, "decimal", precisionX, scaleX);
mvc_create_column(m, tbl, "x", &t);
- sql_find_subtype(&t, "decimal", total_digitsY, decimal_digitsY);
+ sql_find_subtype(&t, "decimal", precisionY, scaleY);
mvc_create_column(m, tbl, "y", &t);
- sql_find_subtype(&t, "decimal", total_digitsZ, decimal_digitsZ);
+ sql_find_subtype(&t, "decimal", precisionZ, scaleZ);
mvc_create_column(m, tbl, "z", &t);
free(header->hi);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list