/// <summary> /// Performs any special processing when the resource is reconstructed from its XML image. /// </summary> /// <param name="node">An XML node containing the resource's XML image.</param> protected void OnFromXml(System.Xml.XmlNode node) { XmlNamespaceManager namespaces = new XmlNamespaceManager(node.OwnerDocument.NameTable); namespaces.AddNamespace("q", Constants.StructuredQueryNamespace); XmlNode queryNode = node.SelectSingleNode("q:Query", namespaces); StructuredQueryHelper.FromXml(queryNode); }
private void RunTest(string testName, Action <StructuredQuery> additionalProcessing = null, int derivedTypesTempTableThreshold = -1) { XmlDocument doc = GetTestCaseXml( ); XmlNode test = doc.DocumentElement.SelectSingleNode("Test[@name='" + testName + "']"); if (test == null) { throw new Exception("Test not found in Query tests.xml: " + testName); } // Load test StructuredQuery query; try { query = StructuredQueryHelper.FromXml(test.FirstChild); } catch (Exception ex) { throw new Exception("Failed to load query for " + testName, ex); } query.TimeZoneName = TimeZoneHelper.SydneyTimeZoneName; if (additionalProcessing != null) { additionalProcessing(query); } // Generate SQL var settings = new QuerySettings { Hint = "test", DebugMode = true, DerivedTypesTempTableThreshold = derivedTypesTempTableThreshold }; QueryBuild result = QueryBuilder.GetSql(query, settings); string sql = result.Sql; sql = Canonical(sql); // Get expected results XmlNode selectSingleNode = test.SelectSingleNode("Expect/text()"); if (selectSingleNode != null) { string expected = Canonical(selectSingleNode.Value); expected = expected.Replace("{userResource}", new EntityRef("core", "userResource").Id.ToString(CultureInfo.InvariantCulture)); Assert.AreEqual(expected, sql, "Generated SQL did not match expected."); } StructuredQueryHelper.ToXml(query); }