Skip to content

Problem with multi where condition #384

@asgene

Description

@asgene

I Found a problem in test.cpp according to #272
Visual Studio 2017

struct User {
		int id = 0;
		int age;
		std::string name;
	};
	auto storage = make_storage("test.db",
		make_table("users",
			make_column("id", &User::id, primary_key()),
			make_column("age", &User::age),
			make_column("name", &User::name)));
	storage.sync_schema();

	storage.replace(User{ 1, 15, "Jeremy" });
	storage.replace(User{ 2, 16, "Nataly" });
	storage.replace(User{ 3, 17, "Nataly" });
	storage.replace(User{ 4, 18, "Nataly" });
	storage.replace(User{ 5, 18, "Nataly" });

	auto users = storage.get_all<User>();
	cout << "users.size = 5 " << users.size() << endl;

	auto users6 = storage.get_all<User>(
		where(
			(false or c(&User::id) == 4)  and
			(false or c(&User::age) == 18)
			));

	cout << "users.size = 1 " << users6.size() << endl;
	for (auto &user : users6) {
		cout << storage.dump(user) << endl;
	}

The output is:

users.size = 5 5
users.size = 1 2
{ id : '4', age : '18', name : 'Nataly' }
{ id : '5', age : '18', name : 'Nataly' }

It seems that the SQL where clause is:

WHERE ( ? OR 'users'."id" = ? AND ? OR 'users'."age" = ?)

but the correct should be:

WHERE ( (? OR 'users'."id" = ?) and (? or 'users'."age" = ?) )

Any advice? Thank you.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions