17 package com.mapd.parser.server;
19 import org.apache.calcite.sql.type.SqlTypeFamily;
20 import org.apache.calcite.sql.type.SqlTypeName;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
24 import java.util.ArrayList;
25 import java.util.EnumSet;
26 import java.util.HashMap;
27 import java.util.List;
32 final static Logger
HEAVYDBLOGGER = LoggerFactory.getLogger(ExtensionFunction.class);
109 this.isRowUdf =
true;
111 this.cursor_field_types = null;
115 final List<ExtArgumentType>
outs,
116 final List<String>
names,
117 final Map<String, String>
options,
123 this.isRowUdf =
false;
130 return this.cursor_field_types;
142 if (this.
names != null) {
143 return this.names.subList(0, this.args.size());
149 if (this.
names != null) {
150 List<String> pretty_names =
new ArrayList<String>();
151 for (
int arg_idx = 0; arg_idx < this.args.size(); ++arg_idx) {
154 pretty_names.add(this.names.get(arg_idx).
split(
"\\[", 2)[0]);
162 if (this.
names != null) {
163 return this.names.subList(this.args.size(), this.
names.size());
173 assert this.isRowUdf();
178 assert this.isTableUdf();
179 List<SqlTypeName> sql_outs =
new ArrayList<SqlTypeName>();
188 return new HashMap<String, String>(this.options);
194 return this.isRowUdf;
198 return !this.isRowUdf();
202 HEAVYDBLOGGER.debug(
"Extensionfunction::toJson: " +
name);
203 StringBuilder json_cons =
new StringBuilder();
204 json_cons.append(
"{");
209 json_cons.append(
"\"outs\":");
210 json_cons.append(
"[");
211 List<String> param_list =
new ArrayList<String>();
215 json_cons.append(ExtensionFunctionSignatureParser.join(param_list,
","));
216 json_cons.append(
"],");
218 json_cons.append(
"\"args\":");
219 json_cons.append(
"[");
220 List<String> param_list =
new ArrayList<String>();
224 json_cons.append(ExtensionFunctionSignatureParser.join(param_list,
","));
225 json_cons.append(
"]");
226 json_cons.append(
"}");
227 return json_cons.toString();
271 return "Array<float>";
273 return "Array<double>";
275 return "Array<bool>";
277 return "Array<TextEncodingDict>";
281 return "Column<i16>";
283 return "Column<i32>";
285 return "Column<i64>";
287 return "Column<float>";
289 return "Column<double>";
291 return "Column<bool>";
293 return "Column<TextEncodingDict>";
295 return "Column<timestamp>";
299 return "geo_multi_point";
303 return "geo_linestring";
305 return "geo_multi_linestring";
307 return "geo_polygon";
309 return "geo_multi_polygon";
313 return "TextEncodingNone";
315 return "TextEncodingDict";
317 return "ColumnList<i8>";
319 return "ColumnList<i16>";
321 return "ColumnList<i32>";
323 return "ColumnList<i64>";
325 return "ColumnList<float>";
327 return "ColumnList<double>";
329 return "ColumnList<bool>";
331 return "ColumnList<TextEncodingDict>";
333 return "Column<Array<i8>>";
335 return "Column<Array<i16>>";
337 return "Column<Array<i32>>";
339 return "Column<Array<i64>>";
341 return "Column<Array<float>>";
343 return "Column<Array<double>>";
345 return "Column<Array<bool>>";
347 return "Column<Array<TextEncodingDict>>";
349 return "ColumnList<Array<i8>>";
351 return "ColumnList<Array<i16>>";
353 return "ColumnList<Array<i32>>";
355 return "ColumnList<Array<i64>>";
357 return "ColumnList<Array<float>>";
359 return "ColumnList<Array<double>>";
361 return "ColumnList<Array<bool>>";
363 return "ColumnList<Array<TextEncodingDict>>";
365 HEAVYDBLOGGER.info(
"Extensionfunction::typeName: unknown type=`" + type +
"`");
370 private static String
dq(
final String str) {
371 return "\"" + str +
"\"";
374 private final List<ExtArgumentType>
args;
375 private final List<ExtArgumentType>
outs;
380 private final Map<String, List<ExtArgumentType>>
384 java.util.List<SqlTypeFamily> sql_sig =
new java.util.ArrayList<SqlTypeFamily>();
386 for (
int arg_idx = 0; arg_idx < this.getArgs().size(); ++arg_idx) {
401 return type == ExtArgumentType.PInt8 || type == ExtArgumentType.PInt16
402 || type == ExtArgumentType.PInt32 || type == ExtArgumentType.PInt64
403 || type == ExtArgumentType.PFloat || type == ExtArgumentType.PDouble
408 return type == ExtArgumentType.ColumnArrayInt8
409 || type == ExtArgumentType.ColumnArrayInt16
410 || type == ExtArgumentType.ColumnArrayInt32
411 || type == ExtArgumentType.ColumnArrayInt64
412 || type == ExtArgumentType.ColumnArrayFloat
413 || type == ExtArgumentType.ColumnArrayDouble
414 || type == ExtArgumentType.ColumnArrayBool
419 return type == ExtArgumentType.ColumnListArrayInt8
420 || type == ExtArgumentType.ColumnListArrayInt16
421 || type == ExtArgumentType.ColumnListArrayInt32
422 || type == ExtArgumentType.ColumnListArrayInt64
423 || type == ExtArgumentType.ColumnListArrayFloat
424 || type == ExtArgumentType.ColumnListArrayDouble
425 || type == ExtArgumentType.ColumnListArrayBool
430 return type == ExtArgumentType.ColumnInt8 || type == ExtArgumentType.ColumnInt16
431 || type == ExtArgumentType.ColumnInt32 || type == ExtArgumentType.ColumnInt64
432 || type == ExtArgumentType.ColumnFloat || type == ExtArgumentType.ColumnDouble
433 || type == ExtArgumentType.ColumnBool
434 || type == ExtArgumentType.ColumnTextEncodingDict
439 return type == ExtArgumentType.ColumnListInt8
440 || type == ExtArgumentType.ColumnListInt16
441 || type == ExtArgumentType.ColumnListInt32
442 || type == ExtArgumentType.ColumnListInt64
443 || type == ExtArgumentType.ColumnListFloat
444 || type == ExtArgumentType.ColumnListDouble
445 || type == ExtArgumentType.ColumnListBool
446 || type == ExtArgumentType.ColumnListTextEncodingDict
531 HEAVYDBLOGGER.error(
"getValueType: no value for type " +
type);
537 return ExtArgumentType.valueOf(
type);
545 return SqlTypeName.BOOLEAN;
548 return SqlTypeName.TINYINT;
551 return SqlTypeName.SMALLINT;
554 return SqlTypeName.INTEGER;
557 return SqlTypeName.BIGINT;
560 return SqlTypeName.FLOAT;
563 return SqlTypeName.DOUBLE;
579 return SqlTypeName.ARRAY;
588 return SqlTypeName.ARRAY;
595 return SqlTypeName.GEOMETRY;
597 return SqlTypeName.CURSOR;
601 return SqlTypeName.VARCHAR;
604 return SqlTypeName.TIMESTAMP;
621 return SqlTypeName.COLUMN_LIST;
627 Set<SqlTypeName> allSqlTypeNames = EnumSet.allOf(SqlTypeName.class);
628 HEAVYDBLOGGER.error(
"toSqlTypeName: unknown type " + type +
" to be mapped to {"
629 + allSqlTypeNames +
"}");
final java.util.List< SqlTypeFamily > toSqlSignature()
size_t append(FILE *f, const size_t size, const int8_t *buf)
Appends the specified number of bytes to the end of the file f from buf.
static SqlTypeName toSqlTypeName(final ExtArgumentType type)
Map< String, List< ExtArgumentType > > getCursorFieldTypes()
final Map< String, String > options
Simplified core of GeoJSON Polygon coordinates definition.
final ExtArgumentType ret
List< ExtArgumentType > getOuts()
ExtensionFunction(final List< ExtArgumentType > args, final List< ExtArgumentType > outs, final List< String > names, final Map< String, String > options, final Map< String, List< ExtArgumentType >> cursor_field_types)
String toJson(final String name)
ColumnArrayTextEncodingDict
List< String > getPrettyArgNames()
final List< String > names
static boolean isColumnListArrayType(final ExtArgumentType type)
Simplified core of GeoJSON MultiPolygon coordinates definition.
static boolean isColumnListType(final ExtArgumentType type)
static boolean isColumnType(final ExtArgumentType type)
static boolean isColumnArrayType(final ExtArgumentType type)
List< String > getArgNames()
Map< String, String > getOptions()
List< ExtArgumentType > getArgs()
final List< ExtArgumentType > args
static final Logger HEAVYDBLOGGER
ExtensionFunction(final List< ExtArgumentType > args, final ExtArgumentType ret)
static String typeName(final ExtArgumentType type)
ColumnListTextEncodingDict
static ExtArgumentType toSqlTypeName(final String type)
static String dq(final String str)
List< SqlTypeName > getSqlOuts()
ColumnListArrayTextEncodingDict
final Map< String, List< ExtArgumentType > > cursor_field_types
static boolean isPointerType(final ExtArgumentType type)
static ExtArgumentType getValueType(final ExtArgumentType type)
final List< ExtArgumentType > outs
List< String > getOutNames()