Skip to content

Commit 299093e

Browse files
committed
refactor!: change SchemaDef parse methods to use mutable references
BREAKING CHANGE: `parse` and `parse_from_settings` methods now take `&mut self` instead of `self` and return `Result<(), _>` instead of `Result<Self, _>`. This changes the API from a builder pattern to an in-place mutation pattern. - Update parse method signature from `parse(mut self, sql: &str) -> Result<Self, _>` to `parse(&mut self, sql: &str) -> Result<(), _>` - Update parse_from_settings method signature similarly - Update all test cases to use mutable references and new API Signed-off-by: Svetlin Ralchev <iamralch@users.noreply.github.com>
1 parent 2528b8f commit 299093e

1 file changed

Lines changed: 33 additions & 33 deletions

File tree

src/schema.rs

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ impl SchemaDef {
4646
}
4747

4848
/// Parse SQL schema from a string
49-
pub fn parse(mut self, sql: &str) -> Result<Self, Box<dyn Error>> {
49+
pub fn parse(&mut self, sql: &str) -> Result<(), Box<dyn Error>> {
5050
let dialect = self.dialect.to_dialect();
5151
let statements = Parser::parse_sql(dialect.as_ref(), sql)?;
5252

@@ -78,7 +78,7 @@ impl SchemaDef {
7878
}
7979
}
8080

81-
Ok(self)
81+
Ok(())
8282
}
8383

8484
/// Get table schema by name
@@ -322,15 +322,15 @@ impl SchemaDef {
322322
impl SchemaDef {
323323
/// Parse schema files from sqlc Settings
324324
pub fn parse_from_settings(
325-
mut self,
325+
&mut self,
326326
settings: &crate::plugin::Settings,
327-
) -> Result<Self, Box<dyn Error>> {
327+
) -> Result<(), Box<dyn Error>> {
328328
for schema_file in &settings.schema {
329329
// In a real plugin, you'd read the file contents
330330
// For now, this is a placeholder that plugins would extend
331-
self = self.parse(schema_file)?;
331+
self.parse(schema_file)?;
332332
}
333-
Ok(self)
333+
Ok(())
334334
}
335335

336336
/// Check if a column is part of the primary key
@@ -470,9 +470,9 @@ mod tests {
470470
#[test]
471471
fn test_parse_create_table_with_inline_pk() {
472472
let sql = "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);";
473-
let parser = SchemaDef::new(SchemaDialect::PostgreSQL)
474-
.parse(sql)
475-
.unwrap();
473+
474+
let mut parser = SchemaDef::new(SchemaDialect::PostgreSQL);
475+
parser.parse(sql).unwrap();
476476

477477
let table = parser.get_table("users").unwrap();
478478
assert_eq!(table.name, "users");
@@ -483,9 +483,9 @@ mod tests {
483483
#[test]
484484
fn test_parse_create_table_with_table_pk() {
485485
let sql = "CREATE TABLE users (id INTEGER, name TEXT, PRIMARY KEY (id));";
486-
let parser = SchemaDef::new(SchemaDialect::PostgreSQL)
487-
.parse(sql)
488-
.unwrap();
486+
487+
let mut parser = SchemaDef::new(SchemaDialect::PostgreSQL);
488+
parser.parse(sql).unwrap();
489489

490490
let table = parser.get_table("users").unwrap();
491491
assert_eq!(table.name, "users");
@@ -503,9 +503,9 @@ mod tests {
503503
FOREIGN KEY (user_id) REFERENCES users(id)
504504
);
505505
"#;
506-
let parser = SchemaDef::new(SchemaDialect::PostgreSQL)
507-
.parse(sql)
508-
.unwrap();
506+
507+
let mut parser = SchemaDef::new(SchemaDialect::PostgreSQL);
508+
parser.parse(sql).unwrap();
509509

510510
let table = parser.get_table("posts").unwrap();
511511
assert_eq!(table.foreign_keys.len(), 1);
@@ -520,9 +520,9 @@ mod tests {
520520
CREATE TABLE users (id INTEGER PRIMARY KEY, email TEXT);
521521
CREATE UNIQUE INDEX idx_email ON users(email);
522522
"#;
523-
let parser = SchemaDef::new(SchemaDialect::PostgreSQL)
524-
.parse(sql)
525-
.unwrap();
523+
524+
let mut parser = SchemaDef::new(SchemaDialect::PostgreSQL);
525+
parser.parse(sql).unwrap();
526526

527527
let table = parser.get_table("users").unwrap();
528528
assert_eq!(table.indexes.len(), 1);
@@ -533,9 +533,9 @@ mod tests {
533533
#[test]
534534
fn test_is_primary_key_column() {
535535
let sql = "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);";
536-
let parser = SchemaDef::new(SchemaDialect::PostgreSQL)
537-
.parse(sql)
538-
.unwrap();
536+
537+
let mut parser = SchemaDef::new(SchemaDialect::PostgreSQL);
538+
parser.parse(sql).unwrap();
539539

540540
assert!(parser.is_primary_key_column("users", "id"));
541541
assert!(!parser.is_primary_key_column("users", "name"));
@@ -551,9 +551,9 @@ mod tests {
551551
FOREIGN KEY (user_id) REFERENCES users(id)
552552
);
553553
"#;
554-
let parser = SchemaDef::new(SchemaDialect::PostgreSQL)
555-
.parse(sql)
556-
.unwrap();
554+
555+
let mut parser = SchemaDef::new(SchemaDialect::PostgreSQL);
556+
parser.parse(sql).unwrap();
557557

558558
let fks = parser.get_column_foreign_keys("posts", "user_id");
559559
assert_eq!(fks.len(), 1);
@@ -570,9 +570,9 @@ mod tests {
570570
FOREIGN KEY (user_id) REFERENCES users(id)
571571
);
572572
"#;
573-
let parser = SchemaDef::new(SchemaDialect::PostgreSQL)
574-
.parse(sql)
575-
.unwrap();
573+
574+
let mut parser = SchemaDef::new(SchemaDialect::PostgreSQL);
575+
parser.parse(sql).unwrap();
576576

577577
let refs = parser.get_referencing_foreign_keys("users");
578578
assert_eq!(refs.len(), 1);
@@ -585,9 +585,9 @@ mod tests {
585585
CREATE TABLE users (id INTEGER PRIMARY KEY, email TEXT);
586586
CREATE UNIQUE INDEX idx_email ON users(email);
587587
"#;
588-
let parser = SchemaDef::new(SchemaDialect::PostgreSQL)
589-
.parse(sql)
590-
.unwrap();
588+
589+
let mut parser = SchemaDef::new(SchemaDialect::PostgreSQL);
590+
parser.parse(sql).unwrap();
591591

592592
assert!(parser.has_unique_index("users", "email"));
593593
assert!(!parser.has_unique_index("users", "id"));
@@ -603,9 +603,9 @@ mod tests {
603603
created_at TIMESTAMP DEFAULT NOW()
604604
);
605605
"#;
606-
let parser = SchemaDef::new(SchemaDialect::PostgreSQL)
607-
.parse(sql)
608-
.unwrap();
606+
607+
let mut parser = SchemaDef::new(SchemaDialect::PostgreSQL);
608+
parser.parse(sql).unwrap();
609609

610610
let table = parser.get_table("users").unwrap();
611611
assert_eq!(table.columns.len(), 4);

0 commit comments

Comments
 (0)