diff --git a/pkg/client/client.go b/pkg/client/client.go index 89a8a95..9fad2a8 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -224,9 +224,7 @@ func (client *Client) TableRows(table string, opts RowsOptions) (*Result, error) func (client *Client) EstimatedTableRowsCount(table string, opts RowsOptions) (*Result, error) { schema, table := getSchemaAndTable(table) - sql := fmt.Sprintf(`SELECT reltuples FROM pg_class WHERE oid = '%s.%s'::regclass;`, schema, table) - - result, err := client.query(sql) + result, err := client.query(statements.EstimatedTableRowCount, schema, table) if err != nil { return nil, err } diff --git a/pkg/client/client_test.go b/pkg/client/client_test.go index c6bac0c..56257fd 100644 --- a/pkg/client/client_test.go +++ b/pkg/client/client_test.go @@ -327,6 +327,29 @@ func testTableConstraints(t *testing.T) { assert.Equal(t, Row{"integrity", "CHECK (book_id IS NOT NULL AND edition IS NOT NULL)"}, res.Rows[1]) } +func testTableNameWithCamelCase(t *testing.T) { + testClient.db.MustExec(`CREATE TABLE "exampleTable" (id int, name varchar);`) + testClient.db.MustExec(`INSERT INTO "exampleTable" (id, name) VALUES (1, 'foo'), (2, 'bar');`) + + _, err := testClient.Table("exampleTable") + assert.NoError(t, err) + + _, err = testClient.TableInfo("exampleTable") + assert.NoError(t, err) + + _, err = testClient.TableConstraints("exampleTable") + assert.NoError(t, err) + + _, err = testClient.TableIndexes("exampleTable") + assert.NoError(t, err) + + _, err = testClient.TableRowsCount("exampleTable", RowsOptions{}) + assert.NoError(t, err) + + _, err = testClient.EstimatedTableRowsCount("exampleTable", RowsOptions{}) + assert.NoError(t, err) +} + func testQuery(t *testing.T) { res, err := testClient.Query("SELECT * FROM books") @@ -444,6 +467,7 @@ func TestAll(t *testing.T) { testTableRowsCountWithLargeTable(t) testTableIndexes(t) testTableConstraints(t) + testTableNameWithCamelCase(t) testQuery(t) testQueryError(t) testQueryInvalidTable(t) diff --git a/pkg/statements/sql.go b/pkg/statements/sql.go index f7d42e6..84a94eb 100644 --- a/pkg/statements/sql.go +++ b/pkg/statements/sql.go @@ -33,7 +33,18 @@ SELECT inet_client_port(), inet_server_addr(), inet_server_port(), - version()` + version()` + + // --------------------------------------------------------------------------- + + EstimatedTableRowCount = ` +SELECT + reltuples +FROM + pg_class +WHERE + oid = ('"' || $1::text || '"."' || $2::text || '"')::regclass +` // ---------------------------------------------------------------------------