public void CanPresentTotalCount() {
			using(var con = CreateConnection()) {
				con.Open();
				var cursor = new ServerSideSqlCursor(con, "SELECT * FROM Users ORDER BY [id]", 2, 1);
				Assert.Equal(7, cursor.TotalCount);
				Assert.Equal(4, cursor.Pages);
			}
		}
    public void CanListFields() {
			using(var con = CreateConnection()) {
				con.Open();
				var cursor = new ServerSideSqlCursor(con, "SELECT * FROM Users ORDER BY [id]", 10, 1);
				var r = cursor.ToArray<dynamic>();
				Assert.Equal(new[] { "id", "name" }, r[0].Columns);
			}
		}
    public void CanUseParameters() {
			using(var con = CreateConnection()) {
				con.Open();
				var cursor = new ServerSideSqlCursor(con, "SELECT * FROM Users WHERE [id]>@0 ORDER BY [id]", 10, 1, 1);
				var r = cursor.ToArray<dynamic>();
				Assert.Equal(2, r[0]["id"]);
				Assert.Equal("bob", r[0]["name"]);
			}
		}
		public void IsAccessibleByDynamicHelper() {
			using(var con = CreateConnection()) {
				con.Open();
				var cursor = new ServerSideSqlCursor(con, "SELECT * FROM Users ORDER BY [id]", 10, 1);
				var r = cursor.FirstOrDefault<dynamic>();
				Assert.Equal("alice", DynamicHelper.GetValue("name", r));
				Assert.Equal("alice", DynamicHelper.GetValue("Name", r));
			}
		}
    public void CanGetResultByIndexes() {
			using(var con = CreateConnection()) {
				con.Open();
				var cursor = new ServerSideSqlCursor(con, "SELECT * FROM Users ORDER BY [id]", 10, 1);
				var r = cursor.ToArray<dynamic>();
				Assert.Equal(1, r[0]["id"]);
				Assert.Equal("alice", r[0]["name"]);
				Assert.Equal(1, r[0][0]);
				Assert.Equal("alice", r[0][1]);
			}
		}
    public void CanGetResultByProperty() {
			using(var con = CreateConnection()) {
				con.Open();
				var cursor = new ServerSideSqlCursor(con, "SELECT * FROM Users ORDER BY [id]", 10, 1);
				var r = cursor.ToArray<dynamic>();
				Assert.Equal(1, r[0].Id);
				Assert.Equal("alice", r[0].Name);
				Assert.Equal(2, r[1].Id);
				Assert.Equal("bob", r[1].Name);
				Assert.Equal(3, r[2].Id);
				Assert.Equal("cecil", r[2].Name);
			}
		}
    public void CanPageResults() {
			using(var con = CreateConnection()) {
				con.Open();
				var cursor = new ServerSideSqlCursor(con, "SELECT * FROM Users ORDER BY [id]", 2, 1);
				var r = cursor.ToArray<dynamic>();
				Assert.Equal(2, r.Length);
				Assert.Equal("alice", r[0].Name);
				Assert.Equal("bob", r[1].Name);

				cursor = new ServerSideSqlCursor(con, "SELECT * FROM Users ORDER BY [id]", 2, 2);
				r = cursor.ToArray<dynamic>();
				Assert.Equal(2, r.Length);
				Assert.Equal("cecil", r[0].Name);
				Assert.Equal("dave", r[1].Name);
				
				cursor = new ServerSideSqlCursor(con, "SELECT * FROM Users ORDER BY [id]", 2, 3);
				r = cursor.ToArray<dynamic>();
				Assert.Equal(2, r.Length);
				Assert.Equal("eve", r[0].Name);
				Assert.Equal("fergie", r[1].Name);
			}
		}