static BOOL elastic_name2types()

in driver/connect.c [2246:2494]


static BOOL elastic_name2types(wstr_st *type_name,
	SQLSMALLINT *c_sql, SQLSMALLINT *sql)
{
	assert(0 < type_name->cnt);
	switch (type_name->cnt) {
		/* 2: IP */
		case sizeof(TYPE_IP) - 1:
			if (! wmemncasecmp(type_name->str,
					MK_WPTR(TYPE_IP), type_name->cnt)) {
				*c_sql = ES_IP_TO_CSQL;
				*sql = ES_IP_TO_SQL;
				return TRUE;
			}
			break;

		/* 4: BYTE, LONG, TEXT, DATE, TIME, NULL */
		case sizeof(TYPE_BYTE) - 1:
			switch (tolower(type_name->str[0])) {
				case (SQLWCHAR)'b':
					if (! wmemncasecmp(type_name->str,
							MK_WPTR(TYPE_BYTE), type_name->cnt)) {
						*c_sql = ES_BYTE_TO_CSQL;
						*sql = ES_BYTE_TO_SQL;
						return TRUE;
					}
					break;
				case (SQLWCHAR)'l':
					if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_LONG),
							type_name->cnt)) {
						*c_sql = ES_LONG_TO_CSQL;
						*sql = ES_LONG_TO_SQL;
						return TRUE;
					}
					break;
				case (SQLWCHAR)'t': /* TEXT, TIME */
					if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_TEXT),
							type_name->cnt)) {
						*c_sql = ES_TEXT_TO_CSQL;
						*sql = ES_TEXT_TO_SQL;
						return TRUE;
					}
					if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_TIME),
							type_name->cnt)) {
						*c_sql = SQL_C_TYPE_TIME;
						*sql = SQL_TYPE_TIME;
						return TRUE;
					}
					break;
				case (SQLWCHAR)'d':
					if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_DATE),
							type_name->cnt)) {
						*c_sql = ES_DATE_TO_CSQL;
						*sql = ES_DATE_TO_SQL;
						return TRUE;
					}
					break;
				case (SQLWCHAR)'n':
					if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_NULL),
							type_name->cnt)) {
						*c_sql = ES_NULL_TO_CSQL;
						*sql = ES_NULL_TO_SQL;
						return TRUE;
					}
					break;
			}
			break;

		/* 5: SHORT, FLOAT, SHAPE */
		case sizeof(TYPE_SHORT) - 1:
			switch (tolower(type_name->str[3])) { /* shoRt, floAt, shaPe */
				case (SQLWCHAR)'r':
					if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_SHORT),
							type_name->cnt)) {
						*c_sql = ES_SHORT_TO_CSQL;
						*sql = ES_SHORT_TO_SQL;
						return TRUE;
					}
					break;
				case (SQLWCHAR)'a':
					if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_FLOAT),
							type_name->cnt)) {
						*c_sql = ES_FLOAT_TO_CSQL;
						*sql = ES_FLOAT_TO_SQL;
						return TRUE;
					}
					break;
				case (SQLWCHAR)'p':
					if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_SHAPE),
							type_name->cnt)) {
						*c_sql = ES_GEO_TO_CSQL;
						*sql = ES_GEO_TO_SQL;
						return TRUE;
					}
					break;
			}
			break;

		/* 6: DOUBLE, BINARY, OBJECT, NESTED */
		case sizeof(TYPE_DOUBLE) - 1:
			switch (tolower(type_name->str[0])) {
				case (SQLWCHAR)'d':
					if (! wmemncasecmp(type_name->str,
							MK_WPTR(TYPE_DOUBLE), type_name->cnt)) {
						*c_sql = ES_DOUBLE_TO_CSQL;
						*sql = ES_DOUBLE_TO_SQL;
						return TRUE;
					}
					break;
				case (SQLWCHAR)'b':
					if (! wmemncasecmp(type_name->str,
							MK_WPTR(TYPE_BINARY), type_name->cnt)) {
						*c_sql = ES_BINARY_TO_CSQL;
						*sql = ES_BINARY_TO_SQL;
						return TRUE;
					}
					break;
				case (SQLWCHAR)'o':
					if (! wmemncasecmp(type_name->str,
							MK_WPTR(TYPE_OBJECT), type_name->cnt)) {
						*c_sql = ES_OBJECT_TO_CSQL;
						*sql = ES_OBJECT_TO_SQL;
						return TRUE;
					}
					break;
				case (SQLWCHAR)'n':
					if (! wmemncasecmp(type_name->str,
							MK_WPTR(TYPE_NESTED), type_name->cnt)) {
						*c_sql = ES_NESTED_TO_CSQL;
						*sql = ES_NESTED_TO_SQL;
						return TRUE;
					}
					break;
			}
			break;

		/* 7: INTEGER, BOOLEAN, KEYWORD, VERSION */
		case sizeof(TYPE_INTEGER) - 1:
			switch (tolower(type_name->str[0])) {
				case (SQLWCHAR)'i': /* integer */
					if (wmemncasecmp(type_name->str, MK_WPTR(TYPE_INTEGER),
							type_name->cnt) == 0) {
						*c_sql = ES_INTEGER_TO_CSQL;
						*sql = ES_INTEGER_TO_SQL;
						return TRUE;
					}
					break;
				case (SQLWCHAR)'b': /* boolean */
					if (wmemncasecmp(type_name->str, MK_WPTR(TYPE_BOOLEAN),
							type_name->cnt) == 0) {
						*c_sql = ES_BOOLEAN_TO_CSQL;
						*sql = ES_BOOLEAN_TO_SQL;
						return TRUE;
					}
					break;
				case (SQLWCHAR)'k': /* keyword */
					if (wmemncasecmp(type_name->str, MK_WPTR(TYPE_KEYWORD),
							type_name->cnt) == 0) {
						*c_sql = ES_KEYWORD_TO_CSQL;
						*sql = ES_KEYWORD_TO_SQL;
						return TRUE;
					}
					break;
				case (SQLWCHAR)'v': /* version */
					if (wmemncasecmp(type_name->str, MK_WPTR(TYPE_VERSION),
							type_name->cnt) == 0) {
						*c_sql = ES_VERSION_TO_CSQL;
						*sql = ES_VERSION_TO_SQL;
						return TRUE;
					}
					break;
			}
			break;

		/* 8: DATETIME */
		case sizeof(TYPE_DATETIME) - 1:
			if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_DATETIME),
					type_name->cnt)) {
				*c_sql = ES_DATETIME_TO_CSQL;
				*sql = ES_DATETIME_TO_SQL;
				return TRUE;
			}
			break;

		/* 9: GEO_POINT, GEO_SHAPE */
		case sizeof(TYPE_GEOSHAPE) - 1:
			switch (tolower(type_name->str[/*'GEO_x'*/4])) {
				case (SQLWCHAR)'s':
					if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_GEOSHAPE),
							type_name->cnt)) {
						*c_sql = ES_GEO_TO_CSQL;
						*sql = ES_GEO_TO_SQL;
						return TRUE;
					}
					break;
				case (SQLWCHAR)'p':
					if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_GEOPOINT),
							type_name->cnt)) {
						*c_sql = ES_GEO_TO_CSQL;
						*sql = ES_GEO_TO_SQL;
						return TRUE;
					}
					break;
			}
			break;

		/* 10: HALF_FLOAT */
		case sizeof(TYPE_HALF_FLOAT) - 1:
			if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_HALF_FLOAT),
					type_name->cnt)) {
				*c_sql = ES_HALF_TO_CSQL_FLOAT;
				*sql = ES_HALF_TO_SQL_FLOAT;
				return TRUE;
			}
			break;

		/* 11: UNSUPPORTED */
		case sizeof(TYPE_UNSUPPORTED) - 1:
			if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_UNSUPPORTED),
					type_name->cnt)) {
				*c_sql = ES_UNSUPPORTED_TO_CSQL;
				*sql = ES_UNSUPPORTED_TO_SQL;
				return TRUE;
			}
			break;

		/* 12: SCALED_FLOAT */
		case sizeof(TYPE_SCALED_FLOAT) - 1:
			if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_SCALED_FLOAT),
					type_name->cnt)) {
				*c_sql = ES_SCALED_TO_CSQL_FLOAT;
				*sql = ES_SCALED_TO_SQL_FLOAT;
				return TRUE;
			}
			break;

		/* 13: UNSIGNED_LONG */
		case sizeof(TYPE_UNSIGNED_LONG) - 1:
			if (! wmemncasecmp(type_name->str, MK_WPTR(TYPE_UNSIGNED_LONG),
					type_name->cnt)) {
				*c_sql = ES_ULONG_TO_CSQL;
				*sql = ES_ULONG_TO_SQL;
				return TRUE;
			}
			break;

	}

	return elastic_intervals_name2types(type_name, c_sql, sql);
}