public void SelectStringOperators()
{
DataTable T = new DataTable("test");
DataColumn C = new DataColumn("name");
T.Columns.Add(C);
C = new DataColumn("age");
C.DataType = typeof(int);
T.Columns.Add(C);
C = new DataColumn("id");
T.Columns.Add(C);
DataSet Set = new DataSet("TestSet");
Set.Tables.Add(T);
DataRow Row = null;
for (int i = 0; i < 100; i++)
{
Row = T.NewRow();
Row[0] = "human" + i;
Row[1] = i;
Row[2] = i;
T.Rows.Add(Row);
}
Row = T.NewRow();
Row[0] = "h*an";
Row[1] = 1;
Row[2] = 1;
T.Rows.Add(Row);
Assert.Equal(1, T.Select("name = 'human' + 1").Length);
Assert.Equal("human1", T.Select("name = 'human' + 1")[0]["name"]);
Assert.Equal(1, T.Select("name = 'human' + '1'").Length);
Assert.Equal("human1", T.Select("name = 'human' + '1'")[0]["name"]);
Assert.Equal(1, T.Select("name = 'human' + 1 + 2").Length);
Assert.Equal("human12", T.Select("name = 'human' + '1' + '2'")[0]["name"]);
Assert.Equal(1, T.Select("name = 'huMAn' + 1").Length);
Set.CaseSensitive = true;
Assert.Equal(0, T.Select("name = 'huMAn' + 1").Length);
T.CaseSensitive = false;
Assert.Equal(1, T.Select("name = 'huMAn' + 1").Length);
T.CaseSensitive = true;
Assert.Equal(0, T.Select("name = 'huMAn' + 1").Length);
Set.CaseSensitive = false;
Assert.Equal(0, T.Select("name = 'huMAn' + 1").Length);
T.CaseSensitive = false;
Assert.Equal(1, T.Select("name = 'huMAn' + 1").Length);
Assert.Equal(0, T.Select("name = 'human1*'").Length);
Assert.Equal(11, T.Select("name like 'human1*'").Length);
Assert.Equal(11, T.Select("name like 'human1%'").Length);
try
{
Assert.Equal(11, T.Select("name like 'h*an1'").Length);
Assert.False(true);
}
catch (EvaluateException e)
{
// 'h*an1' is invalid
Assert.Equal(typeof(EvaluateException), e.GetType());
}
try
{
Assert.Equal(11, T.Select("name like 'h%an1'").Length);
Assert.False(true);
}
catch (EvaluateException e)
{
// 'h%an1' is invalid
Assert.Equal(typeof(EvaluateException), e.GetType());
}
Assert.Equal(0, T.Select("name like 'h[%]an'").Length);
Assert.Equal(1, T.Select("name like 'h[*]an'").Length);
}