private void GenerateQueryContexts() { //if ((int) this.queryLanguage == OldQuery.LoadRelations) // LoadRelatedTables(); //else if (this.queryLanguage == Language.NDOql) if (this.queryLanguage == QueryLanguage.Sql) { var selectList = new SqlColumnListGenerator(pm.NDOMapping.FindClass(typeof(T))).SelectList; var sql = Regex.Replace(this.queryExpression, @"SELECT\s+\*", "SELECT " + selectList); this.expressionTree = new RawIdentifierExpression(sql, 0, 0); } else { NDOql.OqlParser parser = new NDOql.OqlParser(); var parsedTree = parser.Parse(this.queryExpression); if (parsedTree != null) { // The root expression tree might get exchanged. // To make this possible we make it the child of a dummy expression. this.expressionTree = new OqlExpression(0, 0); this.expressionTree.Add(parsedTree); ((IManageExpression)parsedTree).SetParent(this.expressionTree); } } CreateQueryContextsForTypes(); }
public void TestValueTypeRelation() { NDOQuery <Sozialversicherungsnummer> q = new NDOQuery <Sozialversicherungsnummer>(pm, "arbeiter.position.X > 2 AND arbeiter.position.Y < 5"); var fields = new SqlColumnListGenerator(pm.NDOMapping.FindClass(typeof(Sozialversicherungsnummer))).Result(false, false, true); Assert.AreEqual(String.Format($"SELECT {fields} FROM [Sozialversicherungsnummer] INNER JOIN [Mitarbeiter] ON [Mitarbeiter].[ID] = [Sozialversicherungsnummer].[IDSozial] WHERE [Mitarbeiter].[Position_X] > 2 AND [Mitarbeiter].[Position_Y] < 5", this.mitarbeiterFields), q.GeneratedQuery); }
public void Test1To1Bidirectional() { NDOQuery <Mitarbeiter> q = new NDOQuery <Mitarbeiter>(pm, "sn.nummer = 4711"); Assert.AreEqual(String.Format("SELECT {0} FROM [Mitarbeiter] INNER JOIN [Sozialversicherungsnummer] ON [Sozialversicherungsnummer].[ID] = [Mitarbeiter].[IDSozial] WHERE [Sozialversicherungsnummer].[Nummer] = 4711", this.mitarbeiterJoinFields), q.GeneratedQuery); NDOQuery <Sozialversicherungsnummer> qs = new NDOQuery <Sozialversicherungsnummer>(pm, "arbeiter.vorname = 'Mirko'"); var fields = new SqlColumnListGenerator(pm.NDOMapping.FindClass(typeof(Sozialversicherungsnummer))).Result(false, false, true); Assert.AreEqual($"SELECT {fields} FROM [Sozialversicherungsnummer] INNER JOIN [Mitarbeiter] ON [Mitarbeiter].[ID] = [Sozialversicherungsnummer].[IDSozial] WHERE [Mitarbeiter].[Vorname] = 'Mirko'", qs.GeneratedQuery); }
public void Test1To1BiWithTable() { NDOQuery <Zertifikat> qz = new NDOQuery <Zertifikat>(pm, "sgn.signature = 'abc'"); var fields = new SqlColumnListGenerator(pm.NDOMapping.FindClass(typeof(Zertifikat))).Result(false, false, true); Assert.AreEqual($"SELECT {fields} FROM [Zertifikat] INNER JOIN [relSignaturZertifikat] ON [Zertifikat].[ID] = [relSignaturZertifikat].[IDZertifikat] INNER JOIN [Signatur] ON [Signatur].[ID] = [relSignaturZertifikat].[IDSignatur] WHERE [Signatur].[Signature] = 'abc'", qz.GeneratedQuery); NDOQuery <Signatur> qs = new NDOQuery <Signatur>(pm, "owner.schlüssel = -4"); string s = qs.GeneratedQuery; fields = new SqlColumnListGenerator(pm.NDOMapping.FindClass(typeof(Signatur))).Result(false, false, true); Assert.AreEqual($"SELECT {fields} FROM [Signatur] INNER JOIN [relSignaturZertifikat] ON [Signatur].[ID] = [relSignaturZertifikat].[IDSignatur] INNER JOIN [Zertifikat] ON [Zertifikat].[ID] = [relSignaturZertifikat].[IDZertifikat] WHERE [Zertifikat].[Schlüssel] = -4", qs.GeneratedQuery); }
public void QueryWithDateTimeMinValueParameterSearchesForNull() { // The query will fetch for DataContainerDerived objects, too. // Hence we test with "StartsWith", because the query contains additional text, which doesn't matter here. var q = new NDOQuery <DataContainer>(pm, "dateTimeVar = {0}"); q.Parameters.Add(DateTime.MinValue); var fields = new SqlColumnListGenerator(pm.NDOMapping.FindClass(typeof(DataContainer))).SelectList; var sql = $"SELECT {fields} FROM [DataContainer] WHERE [DataContainer].[DateTimeVar] IS NULL"; Assert.That(q.GeneratedQuery.StartsWith(sql)); q = new NDOQuery <DataContainer>(pm, "dateTimeVar <> {0}"); q.Parameters.Add(DateTime.MinValue); sql = $"SELECT {fields} FROM [DataContainer] WHERE [DataContainer].[DateTimeVar] IS NOT NULL"; Assert.That(q.GeneratedQuery.StartsWith(sql)); }
public void CheckIfMultiKeysWork() { NDOQuery <OrderDetail> q = new NDOQuery <OrderDetail>(pm, "oid = {0}"); var od = pm.FindObject(typeof(OrderDetail), new object[] { 1, 2 }); q.Parameters.Add(od.NDOObjectId); var fields = new SqlColumnListGenerator(pm.NDOMapping.FindClass(typeof(OrderDetail))).SelectList; Assert.AreEqual($"SELECT {fields} FROM [OrderDetail] WHERE [OrderDetail].[IDProduct] = {{0}} AND [OrderDetail].[IDOrder] = {{1}}", q.GeneratedQuery); bool thrown = false; try { q = new NDOQuery <OrderDetail>(pm, "oid = -4"); string s = q.GeneratedQuery; } catch (NDOException) { thrown = true; } Assert.AreEqual(true, thrown); }