Closed demoManito closed 2 months ago
[!WARNING]
Rate Limit Exceeded
@demoManito has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 45 minutes and 14 seconds before requesting another review.
How to resolve this issue?
After the wait time has elapsed, a review can be triggered using the `@coderabbitai review` command as a PR comment. Alternatively, push new commits to this PR. We recommend that you space out your commits to avoid hitting the rate limit.How do rate limits work?
CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our [FAQ](https://coderabbit.ai/docs/faq) for further information.Commits
Files that changed from the base of the PR and between 96db8c1a055fabfdb0f7e5330f05037a30347dc5 and 08013ac3e9b8cceac32a32e81a0bf6c23594defa.
The recent update enhances the codebase by introducing a new function, DriverName()
, in driver.go
to retrieve the driver's name. Additionally, a test function TestName
has been included in driver_test.go
to ensure the accuracy of DriverName()
. These changes streamline the process of obtaining the driver name and reinforce its reliability through testing.
File | Change Summary |
---|---|
driver.go |
Added DriverName() function to return the driver name. |
driver_test.go |
Added TestName function to verify the correctness of DriverName() . |
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?
Please provide background information when you are proposing some new API.
Why do you need it?
Does the database/sql/driver
recommend it?
Any other drivers provide it?
Please provide background information when you are proposing some new API.
Why do you need it? Does the
database/sql/driver
recommend it? Any other drivers provide it?
hello @methane
When we create a link every time we need to enter it manually (for example: sql.Open("mysql", dsn)
). the driver name you specify may be different from the name in the driver. If you don’t read the source code, the driver name is It is opaque, so the driver needs to provide a method to obtain the default driver name.
Use sql.Open(mysql.DriverName(), dsn)
. Or you can use ent.Open(mysql.DriverName(), dsn)
when opening with ORM. I think this is a better way to call.
These are some Java drivers that can get the driver name. Golang drivers rarely expose drivers. https://github.com/xerial/sqlite-jdbc/blob/ce109578d710e696ddc8ddae119bfd8f6f455a82/src/main/java/org/sqlite/jdbc3/JDBC3DatabaseMetaData.java#L222 https://github.com/pgjdbc/pgjdbc/blob/450488c142fdc368cab54e8257407603acc18c4f/pgjdbc/src/main/java/org/postgresql/jdbc/PgDatabaseMetaData.java#L170
Please provide background information when you are proposing some new API.
Why do you need it? Does the
database/sql/driver
recommend it? Any other drivers provide it?
And driverName
can be changed through build parameters. If the driver name is manually specified by an external layer, the code needs to be modified and rebuilt. Providing an externally exposed method to obtain driverName
can solve these problems.
Why driver.Connector()
is not enough?
If you want to directly depends on specific driver, you can use the Connector.
If you want to avoid to depends on specific driver, you can not use mysql.DriverName()
.
And if it is common requirements, any preceding driver implement it?
Why
driver.Connector()
is not enough? If you want to directly depends on specific driver, you can use the Connector. If you want to avoid to depends on specific driver, you can not usemysql.DriverName()
.And if it is common requirements, any preceding driver implement it?
Drivers in other languages have functions to obtain the provided driver name. Why only focus on the go language?
Would providing a function to get the default driver name cause any ill effects?
Why
driver.Connector()
is not enough? If you want to directly depends on specific driver, you can use the Connector. If you want to avoid to depends on specific driver, you can not usemysql.DriverName()
.And if it is common requirements, any preceding driver implement it?
Do you think ORM directly declaring mysql is a good choice? This is a common problem faced by many ORMs
Drivers in other languages have functions to obtain the provided driver name. Why only focus on the go language?
Because they don't use database/sql. This problem is tightly coupled with database/sql design.
Are there any problems with getting the default driver name provided here?
Any one public API has maintenance cost. We cannot remove or change its signature until v2. Unless the problem trying to solve is not specific to this driver or MySQL, we want to chose standard or common API. That's why I am asking earlier implementations of the API in the other popular drivers.
Do you think ORM directly declaring mysql is a good choice? This is a common problem faced by many ORMs
Yes. Changing the linkname is very uncommon. So directly use "mysql" doesn't have any problem.
If the driver is registered via an alternate name, the developer who builds the program is aware of it and can provide it to anyone who needs it. We don't need to expose that flawed API in the driver.
By the way, it is also possible:
The proposed API doesn't handle those cases.
So I'm completely opposed to that change.
Disclaimer: I'm the author patch #1499 that allows to change the driver name
Description
Used to get the current driver name
Checklist