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);
114 this.isRowUdf =
true;
116 this.cursor_field_types = null;
120 final List<ExtArgumentType>
outs,
121 final List<String>
names,
122 final Map<String, String>
options,
128 this.isRowUdf =
false;
129 this.annotations = null;
136 return this.cursor_field_types;
148 if (this.
names != null) {
149 return this.names.subList(0, this.args.size());
155 if (this.
names != null) {
156 List<String> pretty_names =
new ArrayList<String>();
157 for (
int arg_idx = 0; arg_idx < this.args.size(); ++arg_idx) {
160 pretty_names.add(this.names.get(arg_idx).
split(
"\\[", 2)[0]);
168 if (this.
names != null) {
169 return this.names.subList(this.args.size(), this.
names.size());
179 assert this.isRowUdf();
185 return new HashMap<String, String>(this.options);
191 return this.isRowUdf;
195 return !this.isRowUdf();
199 HEAVYDBLOGGER.debug(
"Extensionfunction::toJson: " +
name);
200 StringBuilder json_cons =
new StringBuilder();
201 json_cons.append(
"{");
204 json_cons.append(
"\"annotations\":");
205 List<String> anns =
new ArrayList<String>();
206 for (
final Map<String, String> m : this.
annotations) {
207 List<String> lst =
new ArrayList<String>();
208 for (
final Map.Entry<String, String> kv : m.entrySet()) {
209 lst.add(
"\"" + kv.getKey() +
"\":\"" + kv.getValue() +
"\"");
211 anns.add(
"{" + ExtensionFunctionSignatureParser.join(lst,
",") +
"}");
213 json_cons.append(
"[" + ExtensionFunctionSignatureParser.join(anns,
",") +
"],");
216 json_cons.append(
"\"outs\":");
217 json_cons.append(
"[");
218 List<String> param_list =
new ArrayList<String>();
222 json_cons.append(ExtensionFunctionSignatureParser.join(param_list,
","));
223 json_cons.append(
"],");
225 json_cons.append(
"\"args\":");
226 json_cons.append(
"[");
227 List<String> param_list =
new ArrayList<String>();
231 json_cons.append(ExtensionFunctionSignatureParser.join(param_list,
","));
232 json_cons.append(
"]");
233 json_cons.append(
"}");
234 return json_cons.toString();
278 return "Array<float>";
280 return "Array<double>";
282 return "Array<bool>";
284 return "Array<TextEncodingDict>";
288 return "Column<i16>";
290 return "Column<i32>";
292 return "Column<i64>";
294 return "Column<float>";
296 return "Column<double>";
298 return "Column<bool>";
300 return "Column<TextEncodingDict>";
302 return "Column<timestamp>";
306 return "geo_multi_point";
310 return "geo_linestring";
312 return "geo_multi_linestring";
314 return "geo_polygon";
316 return "geo_multi_polygon";
320 return "TextEncodingNone";
322 return "TextEncodingDict";
324 return "ColumnList<i8>";
326 return "ColumnList<i16>";
328 return "ColumnList<i32>";
330 return "ColumnList<i64>";
332 return "ColumnList<float>";
334 return "ColumnList<double>";
336 return "ColumnList<bool>";
338 return "ColumnList<TextEncodingDict>";
340 return "Column<Array<i8>>";
342 return "Column<Array<i16>>";
344 return "Column<Array<i32>>";
346 return "Column<Array<i64>>";
348 return "Column<Array<float>>";
350 return "Column<Array<double>>";
352 return "Column<Array<bool>>";
354 return "Column<Array<TextEncodingDict>>";
356 return "ColumnList<Array<i8>>";
358 return "ColumnList<Array<i16>>";
360 return "ColumnList<Array<i32>>";
362 return "ColumnList<Array<i64>>";
364 return "ColumnList<Array<float>>";
366 return "ColumnList<Array<double>>";
368 return "ColumnList<Array<bool>>";
370 return "ColumnList<Array<TextEncodingDict>>";
372 return "DayTimeInterval";
374 return "YearMonthTimeInterval";
376 HEAVYDBLOGGER.info(
"Extensionfunction::typeName: unknown type=`" + type +
"`");
381 private static String
dq(
final String str) {
382 return "\"" + str +
"\"";
385 private final List<ExtArgumentType>
args;
386 private final List<ExtArgumentType>
outs;
392 private final Map<String, List<ExtArgumentType>>
396 java.util.List<SqlTypeFamily> sql_sig =
new java.util.ArrayList<SqlTypeFamily>();
398 for (
int arg_idx = 0; arg_idx < this.getArgs().size(); ++arg_idx) {
413 return type == ExtArgumentType.PInt8 || type == ExtArgumentType.PInt16
414 || type == ExtArgumentType.PInt32 || type == ExtArgumentType.PInt64
415 || type == ExtArgumentType.PFloat || type == ExtArgumentType.PDouble
420 return type == ExtArgumentType.ColumnArrayInt8
421 || type == ExtArgumentType.ColumnArrayInt16
422 || type == ExtArgumentType.ColumnArrayInt32
423 || type == ExtArgumentType.ColumnArrayInt64
424 || type == ExtArgumentType.ColumnArrayFloat
425 || type == ExtArgumentType.ColumnArrayDouble
426 || type == ExtArgumentType.ColumnArrayBool
431 return type == ExtArgumentType.ArrayInt8 || type == ExtArgumentType.ArrayInt16
432 || type == ExtArgumentType.ArrayInt32 || type == ExtArgumentType.ArrayInt64
433 || type == ExtArgumentType.ArrayFloat || type == ExtArgumentType.ArrayDouble
434 || type == ExtArgumentType.ArrayBool
439 return type == ExtArgumentType.ColumnListArrayInt8
440 || type == ExtArgumentType.ColumnListArrayInt16
441 || type == ExtArgumentType.ColumnListArrayInt32
442 || type == ExtArgumentType.ColumnListArrayInt64
443 || type == ExtArgumentType.ColumnListArrayFloat
444 || type == ExtArgumentType.ColumnListArrayDouble
445 || type == ExtArgumentType.ColumnListArrayBool
450 return type == ExtArgumentType.ColumnInt8 || type == ExtArgumentType.ColumnInt16
451 || type == ExtArgumentType.ColumnInt32 || type == ExtArgumentType.ColumnInt64
452 || type == ExtArgumentType.ColumnFloat || type == ExtArgumentType.ColumnDouble
453 || type == ExtArgumentType.ColumnBool
454 || type == ExtArgumentType.ColumnTextEncodingDict
459 return type == ExtArgumentType.ColumnListInt8
460 || type == ExtArgumentType.ColumnListInt16
461 || type == ExtArgumentType.ColumnListInt32
462 || type == ExtArgumentType.ColumnListInt64
463 || type == ExtArgumentType.ColumnListFloat
464 || type == ExtArgumentType.ColumnListDouble
465 || type == ExtArgumentType.ColumnListBool
466 || type == ExtArgumentType.ColumnListTextEncodingDict
553 HEAVYDBLOGGER.error(
"getValueType: no value for type " +
type);
559 return ExtArgumentType.valueOf(
type);
567 return SqlTypeName.BOOLEAN;
570 return SqlTypeName.TINYINT;
573 return SqlTypeName.SMALLINT;
576 return SqlTypeName.INTEGER;
579 return SqlTypeName.BIGINT;
582 return SqlTypeName.FLOAT;
585 return SqlTypeName.DOUBLE;
601 return SqlTypeName.ARRAY;
610 return SqlTypeName.ARRAY;
617 return SqlTypeName.GEOMETRY;
619 return SqlTypeName.CURSOR;
623 return SqlTypeName.VARCHAR;
626 return SqlTypeName.TIMESTAMP;
643 return SqlTypeName.COLUMN_LIST;
645 return SqlTypeName.INTERVAL_DAY_HOUR;
647 return SqlTypeName.INTERVAL_YEAR_MONTH;
653 Set<SqlTypeName> allSqlTypeNames = EnumSet.allOf(SqlTypeName.class);
654 HEAVYDBLOGGER.error(
"toSqlTypeName: unknown type " + type +
" to be mapped to {"
655 + 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, final List< Map< String, String >> annotations)
static String typeName(final ExtArgumentType type)
ColumnListTextEncodingDict
final List< Map< String, String > > annotations
static boolean isArrayType(final ExtArgumentType type)
static ExtArgumentType toSqlTypeName(final String type)
static String dq(final String str)
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()