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);
95 final List<ExtArgumentType>
outs,
96 final List<String>
names,
97 final Map<String, String>
options) {
102 this.isRowUdf =
false;
115 if (this.
names != null) {
116 return this.names.subList(0, this.args.size());
122 if (this.
names != null) {
123 List<String> pretty_names =
new ArrayList<String>();
124 for (
int arg_idx = 0; arg_idx < this.args.size(); ++arg_idx) {
127 pretty_names.add(this.names.get(arg_idx).
split(
"\\[", 2)[0]);
135 if (this.
names != null) {
136 return this.names.subList(this.args.size(), this.
names.size());
146 assert this.isRowUdf();
151 assert this.isTableUdf();
152 List<SqlTypeName> sql_outs =
new ArrayList<SqlTypeName>();
161 return new HashMap<String, String>(this.options);
167 return this.isRowUdf;
171 return !this.isRowUdf();
175 HEAVYDBLOGGER.debug(
"Extensionfunction::toJson: " +
name);
176 StringBuilder json_cons =
new StringBuilder();
177 json_cons.append(
"{");
182 json_cons.append(
"\"outs\":");
183 json_cons.append(
"[");
184 List<String> param_list =
new ArrayList<String>();
188 json_cons.append(ExtensionFunctionSignatureParser.join(param_list,
","));
189 json_cons.append(
"],");
191 json_cons.append(
"\"args\":");
192 json_cons.append(
"[");
193 List<String> param_list =
new ArrayList<String>();
197 json_cons.append(ExtensionFunctionSignatureParser.join(param_list,
","));
198 json_cons.append(
"]");
199 json_cons.append(
"}");
200 return json_cons.toString();
244 return "Array<float>";
246 return "Array<double>";
248 return "Array<bool>";
252 return "Column<i16>";
254 return "Column<i32>";
256 return "Column<i64>";
258 return "Column<float>";
260 return "Column<double>";
262 return "Column<bool>";
264 return "Column<TextEncodingDict>";
266 return "Column<timestamp>";
272 return "geo_linestring";
274 return "geo_polygon";
276 return "geo_multi_polygon";
280 return "TextEncodingNone";
282 return "TextEncodingDict";
284 return "ColumnList<i8>";
286 return "ColumnList<i16>";
288 return "ColumnList<i32>";
290 return "ColumnList<i64>";
292 return "ColumnList<float>";
294 return "ColumnList<double>";
296 return "ColumnList<bool>";
298 return "ColumnList<TextEncodingDict>";
300 HEAVYDBLOGGER.info(
"Extensionfunction::typeName: unknown type=`" + type +
"`");
305 private static String
dq(
final String str) {
306 return "\"" + str +
"\"";
309 private final List<ExtArgumentType>
args;
310 private final List<ExtArgumentType>
outs;
317 java.util.List<SqlTypeFamily> sql_sig =
new java.util.ArrayList<SqlTypeFamily>();
319 for (
int arg_idx = 0; arg_idx < this.getArgs().size(); ++arg_idx) {
334 return type == ExtArgumentType.PInt8 || type == ExtArgumentType.PInt16
335 || type == ExtArgumentType.PInt32 || type == ExtArgumentType.PInt64
336 || type == ExtArgumentType.PFloat || type == ExtArgumentType.PDouble
341 return type == ExtArgumentType.ColumnInt8 || type == ExtArgumentType.ColumnInt16
342 || type == ExtArgumentType.ColumnInt32 || type == ExtArgumentType.ColumnInt64
343 || type == ExtArgumentType.ColumnFloat || type == ExtArgumentType.ColumnDouble
344 || type == ExtArgumentType.ColumnBool
345 || type == ExtArgumentType.ColumnTextEncodingDict
350 return type == ExtArgumentType.ColumnListInt8
351 || type == ExtArgumentType.ColumnListInt16
352 || type == ExtArgumentType.ColumnListInt32
353 || type == ExtArgumentType.ColumnListInt64
354 || type == ExtArgumentType.ColumnListFloat
355 || type == ExtArgumentType.ColumnListDouble
356 || type == ExtArgumentType.ColumnListBool
404 HEAVYDBLOGGER.error(
"getValueType: no value for type " +
type);
412 return SqlTypeName.BOOLEAN;
414 return SqlTypeName.TINYINT;
416 return SqlTypeName.SMALLINT;
418 return SqlTypeName.INTEGER;
420 return SqlTypeName.BIGINT;
422 return SqlTypeName.FLOAT;
424 return SqlTypeName.DOUBLE;
439 return SqlTypeName.ARRAY;
444 return SqlTypeName.GEOMETRY;
446 return SqlTypeName.CURSOR;
449 return SqlTypeName.VARCHAR;
451 return SqlTypeName.TIMESTAMP;
460 return SqlTypeName.COLUMN_LIST;
466 Set<SqlTypeName> allSqlTypeNames = EnumSet.allOf(SqlTypeName.class);
467 HEAVYDBLOGGER.error(
"toSqlTypeName: unknown type " + type +
" to be mapped to {"
468 + 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)
final Map< String, String > options
Simplified core of GeoJSON Polygon coordinates definition.
final ExtArgumentType ret
ExtensionFunction(final List< ExtArgumentType > args, final List< ExtArgumentType > outs, final List< String > names, final Map< String, String > options)
List< ExtArgumentType > getOuts()
String toJson(final String name)
List< String > getPrettyArgNames()
final List< String > names
Simplified core of GeoJSON MultiPolygon coordinates definition.
static boolean isColumnListType(final ExtArgumentType type)
static boolean isColumnType(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 String dq(final String str)
List< SqlTypeName > getSqlOuts()
static boolean isPointerType(final ExtArgumentType type)
static ExtArgumentType getValueType(final ExtArgumentType type)
final List< ExtArgumentType > outs
List< String > getOutNames()