Я тоже хотел бы найти правильное и нативное решение этого вопроса, проверяя только коммиты на одной ветви и, таким образом, «обвиняя» весь запрос на слияние и / или извлечение. Однако:
, поскольку коммиты главной ветки являются единственными (предположительно) стабильными, я хочу сделать git bisect только на этой ветке.
Если проблема, вызывающая этот вопрос, заключается в том, что некоторые коммиты, которые вам дают, нарушены и вы не можете их протестировать, вы можете использовать:
git bisect skip
Для пропустите этот коммит полностью и отметьте другой. Это решит проблему, возникшую у вас со сломанными коммитами. Как только вы найдете коммит, который нарушил эту функцию, вы можете проследить его до слияния с отслеживаемой веткой.
Полагаю, вы могли бы git bisect skip
ВСЕ коммиты, которые не являются слияниями, либо проверять вручную, либо с помощью скрипта. Это дало бы поведение, заданное в вопросе.
DataReader работает «лениво», поэтому перед запуском он не берет весь набор строк. Это оставляет вам два варианта:
Поскольку я больше занимаюсь SQL, я сделаю подсчет в операторе SQL:
cmd.CommandText = "select count(id) from myTable where word = '" + word + "';";
cmd.CommandType = CommandType.Text;
int RowCount = 0;
RowCount = Convert.ToInt32(cmd.ExecuteScalar());
cmd.CommandText = "select id from myTable where word = '" + word + "';";
SQLiteDataReader reader = cmd.ExecuteReader();
//...
Обратите внимание, как я считал *, а не id в начале. Это потому, что count (id) будет игнорировать id, а count (*) будет игнорировать только полностью пустые строки. Если у вас нет нулевых идентификаторов, используйте count (id) (это немного быстрее, в зависимости от размера вашей таблицы).
Обновление: изменено на ExecuteScalar, а также count (id) на основе комментариев.
То, что вы запрашиваете, неосуществимо - процитирую Игоря Тандетника , мой акцент:
SQLite производит записи одну за другой, по запросу, каждый раз, когда вы звоните
sqlite3_step
. Он просто не знает, сколько их будет , пока не появится какой-нибудьsqlite3_step
вызов, он обнаруживает, что их больше нет.
( sqlite3_step
- это функция в SQLite C API, которую интерфейс C # вызывает здесь для каждой строки в результате).
Вы могли бы скорее сделать "SELECT COUNT (*) from myTable where word = '" + word + "';"
сначала, перед вашим «настоящим» запросом - что сообщит вам, сколько строк вы » собираемся получить из реального запроса.
Выполните второй запрос:
cmd.CommandText = "select count(id) from myTable where word = '" + word + "';"; cmd.CommandType = CommandType.Text; SQLiteDataReader reader = cmd.ExecuteReader();
Тогда ваш читатель будет содержать одну строку с одним столбцом, содержащим количество строк в наборе результатов. Подсчет будет выполнен на сервере, поэтому он должен быть довольно быстрым.
Обычно я бы сделал
select count(1) from myTable where word = '" + word + "';";
, чтобы получить результат как можно быстрее. В случае, когда id является int, это не будет иметь большого значения. Если бы это было что-то немного большее, например строковый, то вы заметите разницу в большом наборе данных.
Рассуждения об этом count (1) будут включать нулевые строки. Но я готов, что меня поправят, если я
Если вы загружаете только столбец id
из базы данных, не будет ли проще просто загрузить в List
, а затем работать оттуда в памяти?
но мне действительно нужно знать счет до
Почему это так? обычно в этом нет необходимости, если вы используете адекватные структуры данных в памяти (Dataset, List ...). Вероятно, есть способ сделать то, что вы хотите, без предварительного подсчета строк.
Вы должны считать с select count ... from. ..
Это замедлит работу вашего приложения. Однако есть простой способ ускорить работу вашего приложения - использовать параметризованные запросы.
См. Здесь: Как обойти проблему "'" в sqlite и c #?
(Так что помимо скорости параметризованные запросы имеют еще два преимущества.)