Opened 8 years ago
Last modified 6 years ago
#1342 closed defect
Petascope_Create correct base type with range fields when create collection — at Version 17
Reported by: | Bang Pham Huu | Owned by: | bbell |
---|---|---|---|
Priority: | critical | Milestone: | 9.7 |
Component: | qlparser | Version: | development |
Keywords: | Cc: | Dimitar Misev | |
Complexity: | Medium |
Description (last modified by )
create cell type:
rasql -q 'create type waxlake42_1470639570867_735_base as (b1 char, b2 char, b3 char)' --user rasadmin --passwd rasadmin
create array type:
rasql -q 'create type waxlake42_1470639570867_735_mdd as waxlake42_1470639570867_735_base mdarray [ x, y ]' --user rasadmin --passwd rasadmin
create set type:
rasql -q 'create type waxlake42_1470639570867_735_set as set (waxlake42_1470639570867_735_mdd)' --user rasadmin --passwd rasadmin
create collection:
rasql -q 'CREATE COLLECTION waxlake3 waxlake42_1470639570867_735_set' --user rasadmin --passwd rasadmin
insert data:
rasql -q "INSERT INTO waxlake3 VALUES <[0:0,0:0] {0c,0c,0c}> " --user rasadmin --passwd rasadmin
result of dbinfo:
rasql -q 'select dbinfo(c)from waxlake3 as c' --out string
rasql: rasdaman query tool v1.0, rasdaman 9.5.0. opening database RASBASE at localhost:7001...ok Executing retrieval query...ok Query result collection has 1 element(s): Result object 1: { "oid": "696833", "baseType": "marray <struct { char , char , char }>", "tileNo": "1", "totalSize": "3", "tiling": { "tilingScheme": "aligned", "tileSize": "4194304", "tileConfiguration": "[0:*,0:*]" }, "index": { "type": "rpt_index", "PCTmax": "4096", "PCTmin": "2048" } } rasql done.
result of referencing by band name:
rasql -q 'select c.b1 from waxlake3 as c' --out string
rasql: rasdaman query tool v1.0, rasdaman 9.5.0. opening database RASBASE at localhost:7001...ok Executing retrieval query...rasdaman error 370: Execution error 370 in line 1, column 9, near token .: Struct selector is not valid. aborting transaction...ok rasql done.
One can still reference the bands by c.0, c.1, c.2.
Change History (17)
comment:1 by , 8 years ago
Component: | rasql → qlparser |
---|---|
Description: | modified (diff) |
Owner: | changed from | to
Status: | new → assigned |
comment:2 by , 8 years ago
comment:3 by , 8 years ago
So irr_cube_2 has different band names, not b1/b2 (notice baseType here):
rasql -q 'select dbinfo(c) from irr_cube_2 as c' --out string --quiet { "oid": "930305", "baseType": "marray <struct { float prediction, float variance }, 3>", "tileNo": "6", "totalSize": "72576", "tiling": { "tilingScheme": "aligned", "tileSize": "4194304", "tileConfiguration": "[0:*,0:*,0:*]" }, "index": { "type": "rpt_index", "PCTmax": "4096", "PCTmin": "2048" } }
For RGBSet however, dbinfo doesn't return any band names, and I think this is the issue (as Sulav pointed there's a null pointer):
rasql -q 'select dbinfo(c) from a as c' --out string --quiet { "oid": "935937", "baseType": "marray <struct { char , char , char }>", "tileNo": "1", "totalSize": "12", "tiling": { "tilingScheme": "aligned", "tileSize": "4194304", "tileConfiguration": "[0:*,0:*]" }, "index": { "type": "rpt_index", "PCTmax": "4096", "PCTmin": "2048" } }
comment:4 by , 8 years ago
so as I checked with Sulav, the problem here is due to basetype which I think from Petascope is not correct then it has effect on Rasdaman which return NULL value and when check basetype with dbinfo() as Dimitar, it showed without the band name (e.g: "baseType": "marray <struct { char , char , char }>" ) for the rgb coverage.
I think Sulav can do this ticket in the meantime http://rasdaman.org/ticket/1269
follow-up: 6 comment:5 by , 8 years ago
Component: | qlparser → petascope |
---|---|
Owner: | changed from | to
Summary: | Rasql_Cannot use range name with different coverages → Petascope_Create correct base type with range fields when create collection |
so the problem is exactly from Petascope as it will use the existing MDD type from Rasdaman without regarding to the band names (i.e: in wcst_import define the band name, however, it will just use the defined base types from Rasdaman.
example: mean_summer_airtemp coverage has 1 band (Gray) and Petascope will use the
typedef marray <char, 2> GreyImage;
instead of create a new structure
marray <struct { char Gray }, 2> Mean_Summer_AirTemp_Image
so the Rasql select dbinfo() will show correct basetype (GreyImage).
follow-up: 7 comment:6 by , 8 years ago
So what is the problem exactly?
- In single band images we shouldn't create structs but use the primitive type directly
- In multi band you specify the band names in the recipe, and that works as far as I know
comment:7 by , 8 years ago
Replying to dmisev:
So what is the problem exactly?
- In single band images we shouldn't create structs but use the primitive type directly
- In multi band you specify the band names in the recipe, and that works as far as I know
The second one is not correct, if you have a 3 bands coverage and you define their names in wcst_import recipe as b1, b2, b3 it will choose RBGSet which will use red, green, blue instead.
comment:9 by , 8 years ago
There is a bug in rasdl ?
i.e: I have 2 different band names for base, mdd and set type (waxlake40 is b3, b2, b1 and waxlkae42 is b1, b2, b3)
//base typedef struct { char b3, char b2, char b1 } waxlake40_1470639488218_207_base; typedef struct { char b1, char b2, char b3 } waxlake42_1470639570867_735_base; //mdd typedef marray <struct { char b3, char b2, char b1 }, [*:*,*:*]> waxlake40_1470639488218_207_mdd; typedef marray <struct { char b1, char b2, char b3 }, [*:*,*:*]> waxlake42_1470639570867_735_mdd; //set typedef set <waxlake40_1470639488218_207_mdd> waxlake40_1470639488218_207_set; typedef set <waxlake42_1470639570867_735_mdd> waxlake42_1470639570867_735_set;
However, when I create a new collection and insert some 0 values to this collection with set type waxlake42, the output with dbinfo() shows that it was used with waxlake40 instead.
rasql -q 'CREATE COLLECTION waxlake3 waxlake42_1470639570867_735_set' --user rasadmin --passwd rasadmin rasql -q "INSERT INTO waxlake3 VALUES <[0:0,0:0] {0c,0c,0c}> " --user rasadmin --passwd rasadmin rasql -q 'select dbinfo(c)from waxlake3 as c' --out string Query result collection has 1 element(s): Result object 1: { "oid": "2561", "baseType": "marray <struct { char b3, char b2, char b1 }, [*:*,*:*]>", "tileNo": "1", "totalSize": "3", "tiling": { "tilingScheme": "aligned", "tileSize": "4194304", "tileConfiguration": "[0:*,0:*]" }, "index": { "type": "rpt_index", "PCTmax": "4096", "PCTmin": "2048" } } rasql done.
follow-up: 11 comment:10 by , 8 years ago
Can you use rasql 'CREATE TYPE' statements to create types? rasdl is deprecated.
comment:11 by , 8 years ago
Replying to dmisev:
Can you use rasql 'CREATE TYPE' statements to create types? rasdl is deprecated.
it was called in Petascope when create base,mdd,set with Create TYPE already
CREATE TYPE waxlake46_1470640461292_21_base AS ( b3 char ,b2 char ,b1 char )
comment:12 by , 8 years ago
Milestone: | 9.3 → 9.4 |
---|
comment:13 by , 8 years ago
Owner: | changed from | to
---|
@bbell please have a look at this one as well, while you're considering the struct alignment issue. There are some rasql queries to help reproduce, start from the most recent comments.
comment:14 by , 7 years ago
Component: | petascope → qlparser |
---|---|
Milestone: | 9.4 → 9.5 |
comment:15 by , 7 years ago
Just to update the ticket, and save some work, with the current state:
create cell type:
rasql -q 'create type waxlake42_1470639570867_735_base as (b1 char, b2 char, b3 char)' --user rasadmin --passwd rasadmin
create array type:
rasql -q 'create type waxlake42_1470639570867_735_mdd as waxlake42_1470639570867_735_base mdarray [ x, y ]' --user rasadmin --passwd rasadmin
create set type:
rasql -q 'create type waxlake42_1470639570867_735_set as set (waxlake42_1470639570867_735_mdd)' --user rasadmin --passwd rasadmin
create collection:
rasql -q 'CREATE COLLECTION waxlake3 waxlake42_1470639570867_735_set' --user rasadmin --passwd rasadmin
insert data:
rasql -q "INSERT INTO waxlake3 VALUES <[0:0,0:0] {0c,0c,0c}> " --user rasadmin --passwd rasadmin
result of dbinfo:
rasql -q 'select dbinfo(c)from waxlake3 as c' --out string
rasql: rasdaman query tool v1.0, rasdaman 9.5.0. opening database RASBASE at localhost:7001...ok Executing retrieval query...ok Query result collection has 1 element(s): Result object 1: { "oid": "696833", "baseType": "marray <struct { char , char , char }>", "tileNo": "1", "totalSize": "3", "tiling": { "tilingScheme": "aligned", "tileSize": "4194304", "tileConfiguration": "[0:*,0:*]" }, "index": { "type": "rpt_index", "PCTmax": "4096", "PCTmin": "2048" } } rasql done.
result of referencing by band name:
rasql -q 'select c.b1 from waxlake3 as c' --out string
rasql: rasdaman query tool v1.0, rasdaman 9.5.0. opening database RASBASE at localhost:7001...ok Executing retrieval query...rasdaman error 370: Execution error 370 in line 1, column 9, near token .: Struct selector is not valid. aborting transaction...ok rasql done.
One can still reference the bands by c.0, c.1, c.2.
comment:16 by , 7 years ago
Milestone: | 9.5 → 9.6 |
---|
comment:17 by , 7 years ago
Description: | modified (diff) |
---|---|
Milestone: | 9.6 → 9.7 |
Priority: | major → critical |
Dropping the database and recreating it fixed this problem.