Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Count rows queries #1442

Open
wants to merge 19 commits into
base: master
Choose a base branch
from

Conversation

BarShauli555
Copy link

A Pull Request should be associated with an Issue.

We wish to have discussions in Issues. A single issue may be targeted by multiple PRs.
If you're offering a new feature or fixing anything, we'd like to know beforehand in Issues,
and potentially we'll be able to point development in a particular direction.

Related issue: https://github.com/github/gh-ost/issues/0123456789

Further notes in https://github.com/github/gh-ost/blob/master/.github/CONTRIBUTING.md
Thank you! We are open to PRs, but please understand if for technical reasons we are unable to accept each and any PR

Description

This PR [briefly explain what it does]

In case this PR introduced Go code changes:

  • contributed code is using same conventions as original code
  • script/cibuild returns with no formatting errors, build errors or unit test errors.

BarShauli555 and others added 17 commits May 6, 2024 17:57
online schema changes with deletion.
architecture as detailed explained here: https://kb.wixpress.com/x/8pocBQ

Where clause condition will always receive the default 1=1.
in case we would like to delete table data we will use the where clause as in a "select" meaning we will put the data we want to save in the where clause.
to include values on the where clause - use the condition as it is. for exclude values please put "not" before.

Please note : 
Where clause condition will be enforced only from the source table and not from the binlog. meaning if I put a where clause of id < 100, and id # 2 was updated \ inserted, it will be in the new table because this DML will be taken from the binlog. this is a feature since this is newly update\insert otherwise it should be inserted into the binlogs as a deleted row.
If you are using one filter operation with in  , please don't put more than 5 values. otherwise please use the sub-select option.
For hash \ string it is better to use the sub-select option, avoiding string manipulation issues in the middle (Jenkins, ansible, Casper). 
Where clause can not be edited in the middle of ghost run.
@@ -554,7 +554,7 @@ func (this *Inspector) CountTableRows(ctx context.Context) error {
return err
}

query := fmt.Sprintf(`select /* gh-ost */ count(*) as count_rows from %s.%s`, sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))
query := fmt.Sprintf(`select /* gh-ost */ table_rows as count_rows from information_schema.tables where table_schema="%s" and table_name="%s"`, sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

table_rows from information_schema is an estimate, not necessarily the exact row count. Elsewhere we estimate the row count if select count(*) cannot complete. So we do not wish to change this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants