public void Select()
{
DataSet Set = new DataSet();
DataTable Mom = new DataTable("Mom");
DataTable Child = new DataTable("Child");
Set.Tables.Add(Mom);
Set.Tables.Add(Child);
DataColumn Col = new DataColumn("Name");
DataColumn Col2 = new DataColumn("ChildName");
Mom.Columns.Add(Col);
Mom.Columns.Add(Col2);
DataColumn Col3 = new DataColumn("Name");
DataColumn Col4 = new DataColumn("Age");
Col4.DataType = typeof(short);
Child.Columns.Add(Col3);
Child.Columns.Add(Col4);
DataRelation Relation = new DataRelation("Rel", Mom.Columns[1], Child.Columns[0]);
Set.Relations.Add(Relation);
DataRow Row = Mom.NewRow();
Row[0] = "Laura";
Row[1] = "Nick";
Mom.Rows.Add(Row);
Row = Mom.NewRow();
Row[0] = "Laura";
Row[1] = "Dick";
Mom.Rows.Add(Row);
Row = Mom.NewRow();
Row[0] = "Laura";
Row[1] = "Mick";
Mom.Rows.Add(Row);
Row = Mom.NewRow();
Row[0] = "Teresa";
Row[1] = "Jack";
Mom.Rows.Add(Row);
Row = Mom.NewRow();
Row[0] = "Teresa";
Row[1] = "Mack";
Mom.Rows.Add(Row);
Row = Mom.NewRow();
Row[0] = "'Jhon O'' Collenal'";
Row[1] = "Pack";
Mom.Rows.Add(Row);
Row = Child.NewRow();
Row[0] = "Nick";
Row[1] = 15;
Child.Rows.Add(Row);
Row = Child.NewRow();
Row[0] = "Dick";
Row[1] = 25;
Child.Rows.Add(Row);
Row = Child.NewRow();
Row[0] = "Mick";
Row[1] = 35;
Child.Rows.Add(Row);
Row = Child.NewRow();
Row[0] = "Jack";
Row[1] = 10;
Child.Rows.Add(Row);
Row = Child.NewRow();
Row[0] = "Mack";
Row[1] = 19;
Child.Rows.Add(Row);
Row = Child.NewRow();
Row[0] = "Mack";
Row[1] = 99;
Child.Rows.Add(Row);
Row = Child.NewRow();
Row[0] = "Pack";
Row[1] = 66;
Child.Rows.Add(Row);
DataRow[] Rows = Mom.Select("Name = 'Teresa'");
Assert.Equal(2, Rows.Length);
// test with apos escaped
Rows = Mom.Select("Name = '''Jhon O'''' Collenal'''");
Assert.Equal(1, Rows.Length);
Rows = Mom.Select("Name = 'Teresa' and ChildName = 'Nick'");
Assert.Equal(0, Rows.Length);
Rows = Mom.Select("Name = 'Teresa' and ChildName = 'Jack'");
Assert.Equal(1, Rows.Length);
Rows = Mom.Select("Name = 'Teresa' and ChildName <> 'Jack'");
Assert.Equal("Mack", Rows[0][1]);
Rows = Mom.Select("Name = 'Teresa' or ChildName <> 'Jack'");
Assert.Equal(6, Rows.Length);
Rows = Child.Select("age = 20 - 1");
Assert.Equal(1, Rows.Length);
Rows = Child.Select("age <= 20");
Assert.Equal(3, Rows.Length);
Rows = Child.Select("age >= 20");
Assert.Equal(4, Rows.Length);
Rows = Child.Select("age >= 20 and name = 'Mack' or name = 'Nick'");
Assert.Equal(2, Rows.Length);
Rows = Child.Select("age >= 20 and (name = 'Mack' or name = 'Nick')");
Assert.Equal(1, Rows.Length);
Assert.Equal("Mack", Rows[0][0]);
Rows = Child.Select("not (Name = 'Jack')");
Assert.Equal(6, Rows.Length);
}