in metadata.go [1181:1234]
func getFunctionsMetadata(session *Session, keyspaceName string) ([]FunctionMetadata, error) {
if session.cfg.ProtoVersion == protoVersion1 || !session.hasAggregatesAndFunctions {
return nil, nil
}
var tableName string
if session.useSystemSchema {
tableName = "system_schema.functions"
} else {
tableName = "system.schema_functions"
}
stmt := fmt.Sprintf(`
SELECT
function_name,
argument_types,
argument_names,
body,
called_on_null_input,
language,
return_type
FROM %s
WHERE keyspace_name = ?`, tableName)
var functions []FunctionMetadata
rows := session.control.query(stmt, keyspaceName).Scanner()
for rows.Next() {
function := FunctionMetadata{Keyspace: keyspaceName}
var argumentTypes []string
var returnType string
err := rows.Scan(&function.Name,
&argumentTypes,
&function.ArgumentNames,
&function.Body,
&function.CalledOnNullInput,
&function.Language,
&returnType,
)
if err != nil {
return nil, err
}
function.ReturnType = getTypeInfo(returnType, byte(session.cfg.ProtoVersion), session.logger)
function.ArgumentTypes = make([]TypeInfo, len(argumentTypes))
for i, argumentType := range argumentTypes {
function.ArgumentTypes[i] = getTypeInfo(argumentType, byte(session.cfg.ProtoVersion), session.logger)
}
functions = append(functions, function)
}
if err := rows.Err(); err != nil {
return nil, err
}
return functions, nil
}