Skip to content

Commit

Permalink
fix: Detect CREATE TABLE statements without schema prefix (#236)
Browse files Browse the repository at this point in the history
Previously, we would only detect `CREATE TABLE` statements where
the table name is qualified by the `public.` schema prefix. This
prefix will not always be present, even for PostgreSQL; it will
certainly not be present for MySQL.
  • Loading branch information
spdawson authored Dec 13, 2022
1 parent 7f08df6 commit fd321c1
Show file tree
Hide file tree
Showing 6 changed files with 125 additions and 0 deletions.
5 changes: 5 additions & 0 deletions integration/flags/.snapshots/TestInitCommand-init
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,11 @@ scan:
<$COLUMN>
)
filters: []
- pattern: |
CREATE TABLE $TABLE_NAME (
<$COLUMN>
)
filters: []
root_singularize: true
root_lowercase: true
metavars: {}
Expand Down
4 changes: 4 additions & 0 deletions pkg/commands/process/settings/custom_detector.yml
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,10 @@ detect_sql_create_public_table:
CREATE TABLE public.$TABLE_NAME (
<$COLUMN>
)
- |
CREATE TABLE $TABLE_NAME (
<$COLUMN>
)
param_parenting: true
root_singularize: true
root_lowercase: true
Expand Down
92 changes: 92 additions & 0 deletions pkg/detectors/custom/.snapshots/TestSQLCreateTableMySQLJSON
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
[
{
"type": "custom",
"detector_type": "detect_sql_create_table",
"source": {
"filename": "structure.sql",
"language": "SQL",
"language_type": "data",
"line_number": 3,
"column_number": 8,
"text": null
},
"value": {
"object_name": "users",
"field_name": "id",
"field_type": "integer",
"field_type_simple": "number"
}
},
{
"type": "custom",
"detector_type": "detect_sql_create_table",
"source": {
"filename": "structure.sql",
"language": "SQL",
"language_type": "data",
"line_number": 4,
"column_number": 8,
"text": null
},
"value": {
"object_name": "users",
"field_name": "class_id",
"field_type": "integer",
"field_type_simple": "number"
}
},
{
"type": "custom",
"detector_type": "detect_sql_create_table",
"source": {
"filename": "structure.sql",
"language": "SQL",
"language_type": "data",
"line_number": 5,
"column_number": 8,
"text": null
},
"value": {
"object_name": "users",
"field_name": "type",
"field_type": "char",
"field_type_simple": "string"
}
},
{
"type": "custom",
"detector_type": "detect_sql_create_table",
"source": {
"filename": "structure.sql",
"language": "SQL",
"language_type": "data",
"line_number": 6,
"column_number": 8,
"text": null
},
"value": {
"object_name": "users",
"field_name": "created_at",
"field_type": "timestamp",
"field_type_simple": "date"
}
},
{
"type": "custom",
"detector_type": "detect_sql_create_table",
"source": {
"filename": "structure.sql",
"language": "SQL",
"language_type": "data",
"line_number": 7,
"column_number": 8,
"text": null
},
"value": {
"object_name": "users",
"field_name": "updated_at",
"field_type": "timestamp",
"field_type_simple": "date"
}
}
]
7 changes: 7 additions & 0 deletions pkg/detectors/custom/custom_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ var configSQLCreateFunction []byte
//go:embed testdata/config/sql_create_table.yml
var configSQLCreateTable []byte

//go:embed testdata/config/sql_create_table_mysql.yml
var configSQLCreateTableMySQL []byte

//go:embed testdata/config/sql_create_trigger.yml
var configSQLCreateTrigger []byte

Expand Down Expand Up @@ -93,6 +96,10 @@ func TestSQLCreateTableJSON(t *testing.T) {
result := runTest(configSQLCreateTable, filepath.Join("testdata", "sql", "create_table"), t)
cupaloy.SnapshotT(t, result)
}
func TestSQLCreateTableMySQLJSON(t *testing.T) {
result := runTest(configSQLCreateTableMySQL, filepath.Join("testdata", "sql", "create_table_mysql"), t)
cupaloy.SnapshotT(t, result)
}

func TestSQLCreateTriggerJSON(t *testing.T) {
result := runTest(configSQLCreateTrigger, filepath.Join("testdata", "sql", "create_trigger"), t)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
detect_sql_create_table:
patterns:
- |
CREATE TABLE $TABLE_NAME (
<$COLUMN>
)
param_parenting: true
languages:
- sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
-- MySQL CREATE TABLE statement
CREATE TABLE users (
id integer NOT NULL,
class_id integer,
type char(255) NOT NULL,
created_at timestamp NOT NULL,
updated_at timestamp NOT NULL
);

0 comments on commit fd321c1

Please sign in to comment.