Comments (2)
Is there a way for me to differentiate between the two?
At the moment, no there isn't. The postgres types are supposed to work on postgres only.
As a (horrible) workaround, you can have the type remember whether it's running against postgres or not:
class MultiDialectDate implements CustomSqlType<PgDate> {
bool isPostgres = false;
@override
String mapToSqlLiteral(PgDate dartValue) {
if (isPostgres) {
return PgTypes.date.mapToSqlLiteral(dartValue);
} else {
return "'${dartValue.toDateTime().toIso8601String()}'";
}
}
@override
Object mapToSqlParameter(PgDate dartValue) {
if (isPostgres) {
return PgTypes.date.mapToSqlParameter(dartValue);
} else {
return dartValue.toDateTime().toIso8601String();
}
}
@override
PgDate read(Object fromSql) {
if (isPostgres) {
return PgTypes.date.read(fromSql);
} else {
return PgDate.fromDateTime(DateTime.parse(fromSql as String));
}
}
@override
String sqlTypeName(GenerationContext context) {
if (isPostgres) {
return 'date';
} else {
return 'text';
}
}
}
Then you can configure this after creating the database instance like this
static final DriftPostgresDatabase _instance =
DriftPostgresDatabase(LazyDatabase(() async {
return NativeDatabase(File('rohan.sqlite'), logStatements: true);
}))
.._markIsPostgres(false);
static final DriftPostgresDatabase _remote = DriftPostgresDatabase(PgDatabase(
endpoint: pg.Endpoint(
host: 'localhost',
database: 'postgres',
username: 'postgres',
password: 'postgres',
),
settings: pg.ConnectionSettings(
// If you expect to talk to a Postgres database over a public connection,
// please use SslMode.verifyFull instead.
sslMode: pg.SslMode.disable,
),
logStatements: true,
))
.._markIsPostgres(true);
void _markIsPostgres(bool postgres) {
for (final table in allTables) {
for (final column in table.$columns) {
final type = column.type;
if (type is MultiDialectDate) {
type.isPostgres = postgres;
}
}
}
}
This fixes the problem, but it's horrible - I'll come up with a better API to have dialect-specific types.
from drift.
It will be possible to properly define dialect-specific custom types in drift 2.15 (with f25eaf1).
from drift.
Related Issues (20)
- Converting database keys in toJson from camelCase to snake_case HOT 1
- LazyDatabase is imposible to execute queries when reopen HOT 1
- flutter web unable to build HOT 1
- No `SqliteException` thrown if when fetching data from non existent column in test mode HOT 4
- Can't compile to wasm HOT 1
- [web] TypeError: Failed to execute 'compile' on 'WebAssembly': Incorrect response MIME type. Expected 'application/wasm' HOT 1
- SqliteException(1): while preparing a statement, unrecognized token: "@" HOT 3
- Database can no longer be mocked with new manager API HOT 10
- [Documentation] Insufficient documentation and examples on complex migration HOT 1
- Ability to mark foreign key constraint as deferrable HOT 1
- Schema verifier fails in setting DatabaseConfig.doubleQuotedStringLiterals HOT 4
- Flutter not resolving
- database is locked error with WAL journal mode HOT 4
- Option to run a few queries sequentially HOT 3
- Code generation creates database table with wrong type HOT 9
- Drift generator doesn't strip custom row class from SQL HOT 1
- Primary Key not required in companion insert HOT 1
- Issue with generated code: database.g.dart file HOT 19
- Select int64 return type HOT 2
- Start a select with the Dart API without specifiying a table
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from drift.