Skip to content

Commit d5bf327

Browse files
authored
add cellToParent (#4)
* add cellToParent * add getResolution
1 parent 472b235 commit d5bf327

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

src/h3ext.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,28 @@ static void sql_cellToLng(sqlite3_context *context, int argc,
5252
}
5353
}
5454

55+
static void sql_cellToParent(sqlite3_context *context, int argc,
56+
sqlite3_value **argv) {
57+
assert(argc == 2);
58+
H3Index index = sqlite3_value_int64(argv[0]);
59+
int res = sqlite3_value_int(argv[1]);
60+
H3Index parent;
61+
H3Error err = cellToParent(index, res, &parent);
62+
if (err == E_SUCCESS) {
63+
sqlite3_result_int64(context, parent);
64+
} else {
65+
sqlite3_result_error(context, "H3 function call failed", -1);
66+
}
67+
}
68+
69+
static void sql_getResolution(sqlite3_context *context, int argc,
70+
sqlite3_value **argv) {
71+
assert(argc == 1);
72+
H3Index index = sqlite3_value_int64(argv[0]);
73+
int res = getResolution(index);
74+
sqlite3_result_int(context, res);
75+
}
76+
5577
#ifdef _WIN32
5678
__declspec(dllexport)
5779
#endif
@@ -76,5 +98,17 @@ __declspec(dllexport)
7698
SQLITE_DETERMINISTIC,
7799
0, sql_cellToLng, 0, 0);
78100
}
101+
if (rc == SQLITE_OK) {
102+
rc = sqlite3_create_function(db, "cellToParent", 2,
103+
SQLITE_UTF8 | SQLITE_INNOCUOUS |
104+
SQLITE_DETERMINISTIC,
105+
0, sql_cellToParent, 0, 0);
106+
}
107+
if (rc == SQLITE_OK) {
108+
rc = sqlite3_create_function(db, "getResolution", 1,
109+
SQLITE_UTF8 | SQLITE_INNOCUOUS |
110+
SQLITE_DETERMINISTIC,
111+
0, sql_getResolution, 0, 0);
112+
}
79113
return rc;
80114
}

0 commit comments

Comments
 (0)