public static RelRoot expandView(NamespaceKey path, final String viewOwner, final String queryString, final List<String> context, final SqlConverter sqlConverter) {
ViewExpansionToken token = null;
try {
token = sqlConverter.getViewExpansionContext().reserveViewExpansionToken(viewOwner);
final DremioCatalogReader catalog;
if(viewOwner != null) {
catalog = sqlConverter.getCatalogReader().withSchemaPathAndUser(viewOwner, context);
} else {
catalog = sqlConverter.getCatalogReader().withSchemaPath(context);
}
final SqlConverter newConverter = new SqlConverter(sqlConverter, catalog);
final SqlNode parsedNode = newConverter.parse(queryString);
final SqlNode validatedNode = newConverter.validate(parsedNode);
final RelRootPlus root = newConverter.toConvertibleRelRoot(validatedNode, true);
if(path == null) {
return root;
}
final boolean contextSensitive = root.isContextSensitive() || ExpansionNode.isContextSensitive(root.rel);
return new RelRoot(ExpansionNode.wrap(path, root.rel, contextSensitive), root.validatedRowType, root.kind, root.fields, root.collation);
} finally {
if (token != null) {
token.release();
}
}
}