Skip to content

Commit ea897af

Browse files
committed
support of the new SHAPE data type (#185)
This commit adds support for the new SHAPE data type. Supporting it requires acceptance of the data type -- the type is mapped as a text object (like the GEO_* types) and the driver treats it as an opaque text field The commit also updates the set of SQL functions the driver reports as supported by Elasticsearch (as data source). (cherry picked from commit 7b8b1dd)
1 parent b53074b commit ea897af

File tree

3 files changed

+25
-15
lines changed

3 files changed

+25
-15
lines changed

driver/connect.c

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
/* 5 */
4949
#define TYPE_SHORT "SHORT"
5050
#define TYPE_FLOAT "FLOAT"
51+
#define TYPE_SHAPE "SHAPE"
5152
/* 6 */
5253
#define TYPE_DOUBLE "DOUBLE"
5354
#define TYPE_BINARY "BINARY"
@@ -2015,25 +2016,33 @@ static BOOL elastic_name2types(wstr_st *type_name,
20152016
}
20162017
break;
20172018

2018-
/* 5: SHORT, FLOAT */
2019+
/* 5: SHORT, FLOAT, SHAPE */
20192020
case sizeof(TYPE_SHORT) - 1:
2020-
switch (tolower(type_name->str[0])) {
2021-
case (SQLWCHAR)'s':
2021+
switch (tolower(type_name->str[3])) { /* shoRt, floAt, shaPe */
2022+
case (SQLWCHAR)'r':
20222023
if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_SHORT),
20232024
type_name->cnt)) {
20242025
*c_sql = ES_SHORT_TO_CSQL;
20252026
*sql = ES_SHORT_TO_SQL;
20262027
return TRUE;
20272028
}
20282029
break;
2029-
case (SQLWCHAR)'f':
2030+
case (SQLWCHAR)'a':
20302031
if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_FLOAT),
20312032
type_name->cnt)) {
20322033
*c_sql = ES_FLOAT_TO_CSQL;
20332034
*sql = ES_FLOAT_TO_SQL;
20342035
return TRUE;
20352036
}
20362037
break;
2038+
case (SQLWCHAR)'p':
2039+
if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_SHAPE),
2040+
type_name->cnt)) {
2041+
*c_sql = ES_GEO_TO_CSQL;
2042+
*sql = ES_GEO_TO_SQL;
2043+
return TRUE;
2044+
}
2045+
break;
20372046
}
20382047
break;
20392048

@@ -2452,7 +2461,7 @@ static void *copy_types_rows(esodbc_dbc_st *dbc, estype_row_st *type_row,
24522461
if (types[i].data_type == ESODBC_SQL_BOOLEAN) {
24532462
types[i].data_type = ES_BOOLEAN_TO_SQL;
24542463
}
2455-
/* GEO (SHAPE, POINT) types are WKT encodings */
2464+
/* GEO (SHAPE, POINT), SHAPE types are WKT encodings */
24562465
if (types[i].data_type == ESODBC_SQL_GEO) {
24572466
types[i].data_type = ES_GEO_TO_SQL;
24582467
}

driver/defs.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -284,16 +284,17 @@
284284
* Timedate functions support:
285285
* - supported: DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, EXTRACT, HOUR,
286286
* MINUTE, MONTH, MONTHNAME, QUARTER, SECOND, WEEK, YEAR, NOW,
287-
* CURRENT_TIMESTAMP, CURRENT_DATE, CURDATE;
288-
* - not supported: CURRENT_TIME, CURTIME, TIMESTAMPADD, TIMESTAMPDIFF.
287+
* CURRENT_TIMESTAMP, CURRENT_DATE, CURDATE, CURRENT_TIME, CURTIME;
288+
* - not supported: TIMESTAMPADD, TIMESTAMPDIFF.
289289
*/
290290
#define ESODBC_TIMEDATE_FUNCTIONS (0LU | \
291291
SQL_FN_TD_DAYNAME | SQL_FN_TD_DAYOFMONTH | SQL_FN_TD_DAYOFWEEK | \
292292
SQL_FN_TD_DAYOFYEAR | SQL_FN_TD_EXTRACT | SQL_FN_TD_HOUR | \
293293
SQL_FN_TD_MINUTE | SQL_FN_TD_MONTH | SQL_FN_TD_MONTHNAME | \
294294
SQL_FN_TD_QUARTER | SQL_FN_TD_SECOND | SQL_FN_TD_WEEK | \
295295
SQL_FN_TD_YEAR | SQL_FN_TD_NOW | SQL_FN_TD_CURRENT_TIMESTAMP | \
296-
SQL_FN_TD_CURDATE | SQL_FN_TD_CURRENT_DATE )
296+
SQL_FN_TD_CURDATE | SQL_FN_TD_CURRENT_DATE | SQL_FN_TD_CURRENT_TIME | \
297+
SQL_FN_TD_CURTIME)
297298

298299
/*
299300
* TIMESTAMPDIFF timestamp intervals:
@@ -351,11 +352,11 @@
351352
#define ESODBC_SQL92_NUMERIC_VALUE_FUNCTIONS 0LU
352353
/*
353354
* SQL92 datetime functions:
354-
* - supported: CURRENT_DATE, CURRENT_DATETIME.
355-
* - not supported: CURRENT_TIME
355+
* - supported: CURRENT_DATE, CURRENT_DATETIME, CURRENT_TIME.
356+
* - not supported: none.
356357
*/
357358
#define ESODBC_SQL92_DATETIME_FUNCTIONS (0LU | \
358-
SQL_SDF_CURRENT_DATE | SQL_SDF_CURRENT_TIMESTAMP )
359+
SQL_SDF_CURRENT_TIMESTAMP | SQL_SDF_CURRENT_DATE | SQL_SDF_CURRENT_TIME)
359360
/*
360361
* SQL92 datetime literals support:
361362
* - supported: TIMESTAMP, INTERVAL: YEAR/MONTH/DAY/HOUR/MINUTE/SECOND/
@@ -381,11 +382,11 @@
381382
SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND )
382383
/*
383384
* SQL92 value functions:
384-
* - supported: COALESCE, NULLIF
385-
* - not supported: CASE, CAST.
385+
* - supported: CASE, CAST, COALESCE, NULLIF
386+
* - not supported: none.
386387
*/
387388
#define ODBC_SQL92_VALUE_EXPRESSIONS (0LU | \
388-
SQL_SVE_COALESCE | SQL_SVE_NULLIF)
389+
SQL_SVE_CASE | SQL_SVE_CAST | SQL_SVE_COALESCE | SQL_SVE_NULLIF)
389390

390391
/*
391392
* ES specific data types

driver/info.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ static SQLRETURN getinfo_sql(
489489
case SQL_DROP_VIEW:
490490
RET_INFO(SQL_C_ULONG, 0, "[drop statement]");
491491
case SQL_EXPRESSIONS_IN_ORDERBY:
492-
DBGH(dbc, "requested: expressions in order by (0).");
492+
DBGH(dbc, "requested: expressions in order by (Y).");
493493
return write_wstr(dbc, InfoValue, &MK_WSTR("Y"),
494494
BufferLength, StringLengthPtr);
495495
case SQL_GROUP_BY:

0 commit comments

Comments
 (0)