Skip to content

Conversation

harshdubey166
Copy link

@harshdubey166 harshdubey166 commented Jun 26, 2025

This PR adds support for OPENXML with WITH clause.

OPENXML provides a rowset view over an XML document. Since OPENXML is a rowset provider and it returns a set of rows, we can use OPENXML in the FROM clause of a T-SQL statement just as we can use any other table, view, or table-valued function. The WITH clause in OPENXML provides a rowset format (and additional mapping information as required) by using either SchemaDeclaration or specifying an existing TableName.
Currently Babelfish does not have support for openxml. So the primary objective is to add support for OPENXML with WITH clause.
The syntax of openxml is as follows :

OPENXML ( idoc int [ in ] , rowpattern nvarchar [ in ], [ flags byte [ in ] ] )
    [ WITH ( SchemaDeclaration | TableName ) ]

Arguments

  • idoc
    • The document handle of the internal representation of an XML document. The internal representation of an XML document is created by calling sp_xml_preparedocument.
  • rowpattern
    • The XPath pattern used to identify the nodes to be processed as rows. The nodes come from the XML document whose handle is passed in the idoc parameter.
  • flags
    • Indicates the mapping used between the XML data and the relational rowset, and how the spill-over column is filled. flags is an optional input parameter, and can be one of the following values.

The WITH clause provides a rowset format (and additional mapping information as required) by using either SchemaDeclaration or specifying an existing TableName. If the optional WITH clause isn't specified, the results are returned in an edge table format. Edge tables represent the fine-grained XML document structure (such as element/attribute names, the document hierarchy, the namespaces, PIs, and so on) in a single table.

BABEL-3635
Extensions PR : amazon-aurora/babelfish_extensions#76

Reviewed extension PR : babelfish-for-postgresql/babelfish_extensions#3820
Reviwed engine PR : babelfish-for-postgresql#587
Signed-off-by: Harsh Dubey [email protected]

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@harshdubey166 harshdubey166 changed the title Babel 3635 Added support for OPENXML with WITH clause Jun 27, 2025
@rohit01010 rohit01010 merged commit 9be3183 into amazon-aurora:BABEL-3635 Jun 30, 2025
2 checks passed
rohit01010 pushed a commit to amazon-aurora/babelfish_extensions that referenced this pull request Jun 30, 2025
OPENXML provides a rowset view over an XML document. Since OPENXML is a rowset provider and it returns a set of rows, we can use OPENXML in the FROM clause of a T-SQL statement just as we can use any other table, view, or table-valued function. The WITH clause in OPENXML provides a rowset format (and additional mapping information as required) by using either SchemaDeclaration or specifying an existing TableName.
Currently Babelfish does not have support for openxml. So the primary objective is to add support for OPENXML with WITH clause.
The syntax of openxml is as follows :

OPENXML ( idoc int [ in ] , rowpattern nvarchar [ in ], [ flags byte [ in ] ] )
    [ WITH ( SchemaDeclaration | TableName ) ]
Arguments

idoc
The document handle of the internal representation of an XML document. The internal representation of an XML document is created by calling sp_xml_preparedocument.
rowpattern
The XPath pattern used to identify the nodes to be processed as rows. The nodes come from the XML document whose handle is passed in the idoc parameter.
flags
Indicates the mapping used between the XML data and the relational rowset, and how the spill-over column is filled. flags is an optional input parameter, and can be one of the following values.
The WITH clause provides a rowset format (and additional mapping information as required) by using either SchemaDeclaration or specifying an existing TableName. If the optional WITH clause isn't specified, the results are returned in an edge table format. Edge tables represent the fine-grained XML document structure (such as element/attribute names, the document hierarchy, the namespaces, PIs, and so on) in a single table.

BABEL-3635
Engine PR : amazon-aurora/postgresql_modified_for_babelfish#133

Signed-off-by: Harsh Dubey [email protected]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants