Jozza.net

Convert .Net DataSet to Query

<cffunction name="datasetToQuery" access="public" returntype="query" output="false">
        <cfargument type="any" name="dataset" required="true">
        <cfargument type="string" name="tablename" required="true">
        
        <!--- dataset has 2 nodes: 1) Column definitions 2) Data --->
        
        <cfset var qryResult = "">
        <cfset var lstColumns = "">
        <cfset var lstTypes = "">
        <cfset var aryDataset = ARGUMENTS.dataset.get_any()>
        <cfset var aryColumns = XmlSearch(aryDataset[1].getAsString(), "/xs:schema/xs:element[@name='#ARGUMENTS.tablename#']/xs:complexType/xs:sequence/xs:element")>
        <cfset var aryData = XmlSearch(aryDataset[2].getAsString(), "/diffgr:diffgram/NewDataSet/#ARGUMENTS.tablename#")>
        <cfset var i = 0>
        <cfset var c = 0>
        
        <!--- get columns --->
        <cfloop from="1" to="#arrayLen(aryColumns)#" index="i">
            <cfset lstColumns = listAppend(lstColumns, aryColumns[i].xmlAttributes.name)>
            <cfswitch expression="#aryColumns[i].xmlAttributes.type#">
                <cfcase value="xs:double,xs:long">
                    <cfset lstTypes = listAppend(lstTypes, 'double')>
                </cfcase>
                <cfcase value="xs:date">
                    <cfset lstTypes = listAppend(lstTypes, 'timestamp')>
                </cfcase>
                <cfdefaultcase>
                    <cfset lstTypes = listAppend(lstTypes, 'varchar')>
                </cfdefaultcase>
            </cfswitch>
        </cfloop>
    
        <!--- create query object --->
        <cfset qryResult = queryNew(lstColumns, lstTypes)>
        
        <!--- populate query --->
        <cfloop from="1" to="#arrayLen(aryData)#" index="i">
            <cfset queryAddRow(qryResult)>
            <cfloop from="1" to="#arrayLen(aryData[i].xmlChildren)#" index="c">
                <cfset querySetCell(qryResult, aryData[i].xmlChildren[c].xmlName, aryData[i].xmlChildren[c].xmlText)>
            </cfloop>
        </cfloop>
        
        <cfreturn qryResult>
    </cffunction>