Skip to content

Db write#37

Merged
kishyassin merged 15 commits intokishyassin:mainfrom
jason-costello:db-write
Feb 2, 2026
Merged

Db write#37
kishyassin merged 15 commits intokishyassin:mainfrom
jason-costello:db-write

Conversation

@jason-costello
Copy link
Copy Markdown
Contributor

reference: #33

-- note that I initially created the read and write functionality in the same branch and it took a good refactor to separate them to unique branches. I believe I copied the same sql_dialect file from the read branch to this branch to ensure it doesn't matter which one is merged first.

  • ToSQL, ToSQLContext, ToSQLTx, ToSQLTxContext methods
  • IfExists modes: "fail", "replace", "append"
  • Batch INSERT with configurable batch size (default 1000)
  • Custom type mapping via TypeMap option
  • Auto-create tables with CREATE TABLE
  • Transaction support

Implement database read operations with support for SQLite, PostgreSQL, and MySQL:

- Add FromSQL, FromSQLContext, FromSQLTx, FromSQLTxContext functions
- Support configurable NULL handling (nil, zero, skip_row, custom map)
- Add SQL dialect system for database-specific operations
- Include comprehensive test suite with 15 tests covering:
  * Basic read operations and type mapping
  * All NULL handling modes
  * Parameterized queries and transactions
  * Context support and error cases

All tests pass successfully.
Implemented DataFrame.ToSQL methods to write data to SQL databases
with support for SQLite, PostgreSQL, and MySQL. Features include:

- ToSQL, ToSQLContext, ToSQLTx, ToSQLTxContext methods
- IfExists modes: fail, replace, append
- Batch INSERT with configurable batch size (default 1000)
- Auto-create tables with inferred schema
- Custom type mapping via TypeMap option
- Proper NULL value handling with sql.Null* types
- Transaction support for atomic operations

Files added:
- dataframe/sql_dialect.go (297 lines) - Dialect system
- dataframe/sql_write.go (311 lines) - Write implementation
- goframe_tests/sql_write_test.go (609 lines) - 14 tests

All 54 tests passing (14 new SQL write tests + 40 existing tests)
Updated to add the parseDate logic to convert any type of date input from the database for columns is in the parseDates slice and return a time.Time type.   This allows for common time formats, unix time as int, unix time as int64, and fractional seconds/milliseconds.
… in order to streamline this PR and keep it focused on singular feature.
…s the return value only includes a query with the correcet placeholder. The known tablename will be used as the vars argument going into the query function for the specific db driver. Generated tests for sql_dialect.
Copy link
Copy Markdown
Collaborator

@cs168898 cs168898 left a comment

Choose a reason for hiding this comment

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

In this commit (4ede829), I seen you have added sql_read.go and its tests into this PR as well, I personally advise against merging another PR's unapproved changes into the same PR which can cause a lot of discrepancy and complication. PRs should focus on one feature at a time.

I recommend using git rebase -i db-write on the branch that you merged the 2 codes together then only keeping the code BEFORE the merge.

@kishyassin kishyassin merged commit a9cb3d2 into kishyassin:main Feb 2, 2026
1 check passed
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.

3 participants