Migrated angel_orm
This commit is contained in:
parent
ed87d48c96
commit
69b7483794
38 changed files with 278 additions and 681 deletions
|
@ -38,6 +38,11 @@
|
|||
* Updated angel_orm_test to 1.0.0 (in progress)
|
||||
* Updated angel_orm_postgres to 2.0.0 (in progress)
|
||||
* Update orm-sdk-2.12.x boilerplate (in progress)
|
||||
* Updated angel_serialize to 4.0.0 (0/0 tests passed)
|
||||
* Updated angel_serialize_generator to 4.0.0 (33/33 tests passed)
|
||||
* Updated angel_orm to 4.0.0 (0/0 tests passed)
|
||||
* Updated angel_migration to 3.0.0
|
||||
* Updated angel_orm_generator to 3.0.0 (use a fork of postgres)
|
||||
|
||||
# 3.0.0 (Non NNBD)
|
||||
* Changed Dart SDK requirements for all packages to ">=2.10.0 <3.0.0"
|
||||
|
@ -65,7 +70,7 @@
|
|||
* Update basic-sdk-2.12.x boilerplate (1/1 tests passed)
|
||||
* Updated angel_serialize to 3.0.0 (0/0 tests passed)
|
||||
* Updated angel_serialize_generator to 3.0.0 (33/33 tests passed)
|
||||
* Updated angel_orm to 3.0.0
|
||||
* Updated angel_orm to 3.0.0 (0/0 tests passed)
|
||||
* Updated angel_migration to 3.0.0
|
||||
* Updated angel_orm_generator to 3.0.0 (use a fork of postgres)
|
||||
* Updated angel_migration_runner to 3.0.0
|
||||
|
|
|
@ -38,8 +38,8 @@ main() async {
|
|||
'http://localhost:3000/auth/twitter/callback',
|
||||
),
|
||||
(twit, req, res) async {
|
||||
var response = await twit.twitterClient
|
||||
.get('https://api.twitter.com/1.1/account/verify_credentials.json');
|
||||
var response = await twit.twitterClient.get(Uri.parse(
|
||||
'https://api.twitter.com/1.1/account/verify_credentials.json'));
|
||||
var userData = json.decode(response.body) as Map;
|
||||
return _User(userData['screen_name'] as String);
|
||||
},
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
name: "angel_auth_twitter"
|
||||
#author: "Tobe O <thosakwe@gmail.com>"
|
||||
version: 3.0.0
|
||||
description: "package:angel_auth strategy for Twitter login. Auto-signs requests."
|
||||
homepage: "https://github.com/angel-dart/auth_twitter.git"
|
||||
publish_to: none
|
||||
environment:
|
||||
sdk: ">=2.10.0 <3.0.0"
|
||||
homepage: "https://github.com/angel-dart/auth_twitter.git"
|
||||
version: 3.0.0
|
||||
publish_to: none
|
||||
dependencies:
|
||||
angel_auth:
|
||||
git:
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
orm
|
|
@ -1,451 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DBNavigator.Project.DataEditorManager">
|
||||
<record-view-column-sorting-type value="BY_INDEX" />
|
||||
<value-preview-text-wrapping value="true" />
|
||||
<value-preview-pinned value="false" />
|
||||
</component>
|
||||
<component name="DBNavigator.Project.DataExportManager">
|
||||
<export-instructions>
|
||||
<create-header value="true" />
|
||||
<quote-values-containing-separator value="true" />
|
||||
<quote-all-values value="false" />
|
||||
<value-separator value="" />
|
||||
<file-name value="" />
|
||||
<file-location value="" />
|
||||
<scope value="GLOBAL" />
|
||||
<destination value="FILE" />
|
||||
<format value="EXCEL" />
|
||||
<charset value="windows-1252" />
|
||||
</export-instructions>
|
||||
</component>
|
||||
<component name="DBNavigator.Project.DatabaseBrowserManager">
|
||||
<autoscroll-to-editor value="false" />
|
||||
<autoscroll-from-editor value="true" />
|
||||
<show-object-properties value="true" />
|
||||
<loaded-nodes />
|
||||
</component>
|
||||
<component name="DBNavigator.Project.EditorStateManager">
|
||||
<last-used-providers />
|
||||
</component>
|
||||
<component name="DBNavigator.Project.MethodExecutionManager">
|
||||
<method-browser />
|
||||
<execution-history>
|
||||
<group-entries value="true" />
|
||||
<execution-inputs />
|
||||
</execution-history>
|
||||
<argument-values-cache />
|
||||
</component>
|
||||
<component name="DBNavigator.Project.ObjectDependencyManager">
|
||||
<last-used-dependency-type value="INCOMING" />
|
||||
</component>
|
||||
<component name="DBNavigator.Project.ObjectQuickFilterManager">
|
||||
<last-used-operator value="EQUAL" />
|
||||
<filters />
|
||||
</component>
|
||||
<component name="DBNavigator.Project.ScriptExecutionManager" clear-outputs="true">
|
||||
<recently-used-interfaces />
|
||||
</component>
|
||||
<component name="DBNavigator.Project.Settings">
|
||||
<connections />
|
||||
<browser-settings>
|
||||
<general>
|
||||
<display-mode value="TABBED" />
|
||||
<navigation-history-size value="100" />
|
||||
<show-object-details value="false" />
|
||||
</general>
|
||||
<filters>
|
||||
<object-type-filter>
|
||||
<object-type name="SCHEMA" enabled="true" />
|
||||
<object-type name="USER" enabled="true" />
|
||||
<object-type name="ROLE" enabled="true" />
|
||||
<object-type name="PRIVILEGE" enabled="true" />
|
||||
<object-type name="CHARSET" enabled="true" />
|
||||
<object-type name="TABLE" enabled="true" />
|
||||
<object-type name="VIEW" enabled="true" />
|
||||
<object-type name="MATERIALIZED_VIEW" enabled="true" />
|
||||
<object-type name="NESTED_TABLE" enabled="true" />
|
||||
<object-type name="COLUMN" enabled="true" />
|
||||
<object-type name="INDEX" enabled="true" />
|
||||
<object-type name="CONSTRAINT" enabled="true" />
|
||||
<object-type name="DATASET_TRIGGER" enabled="true" />
|
||||
<object-type name="DATABASE_TRIGGER" enabled="true" />
|
||||
<object-type name="SYNONYM" enabled="true" />
|
||||
<object-type name="SEQUENCE" enabled="true" />
|
||||
<object-type name="PROCEDURE" enabled="true" />
|
||||
<object-type name="FUNCTION" enabled="true" />
|
||||
<object-type name="PACKAGE" enabled="true" />
|
||||
<object-type name="TYPE" enabled="true" />
|
||||
<object-type name="TYPE_ATTRIBUTE" enabled="true" />
|
||||
<object-type name="ARGUMENT" enabled="true" />
|
||||
<object-type name="DIMENSION" enabled="true" />
|
||||
<object-type name="CLUSTER" enabled="true" />
|
||||
<object-type name="DBLINK" enabled="true" />
|
||||
</object-type-filter>
|
||||
</filters>
|
||||
<sorting>
|
||||
<object-type name="COLUMN" sorting-type="NAME" />
|
||||
<object-type name="FUNCTION" sorting-type="NAME" />
|
||||
<object-type name="PROCEDURE" sorting-type="NAME" />
|
||||
<object-type name="ARGUMENT" sorting-type="POSITION" />
|
||||
</sorting>
|
||||
<default-editors>
|
||||
<object-type name="VIEW" editor-type="SELECTION" />
|
||||
<object-type name="PACKAGE" editor-type="SELECTION" />
|
||||
<object-type name="TYPE" editor-type="SELECTION" />
|
||||
</default-editors>
|
||||
</browser-settings>
|
||||
<navigation-settings>
|
||||
<lookup-filters>
|
||||
<lookup-objects>
|
||||
<object-type name="SCHEMA" enabled="true" />
|
||||
<object-type name="USER" enabled="false" />
|
||||
<object-type name="ROLE" enabled="false" />
|
||||
<object-type name="PRIVILEGE" enabled="false" />
|
||||
<object-type name="CHARSET" enabled="false" />
|
||||
<object-type name="TABLE" enabled="true" />
|
||||
<object-type name="VIEW" enabled="true" />
|
||||
<object-type name="MATERIALIZED VIEW" enabled="true" />
|
||||
<object-type name="NESTED TABLE" enabled="false" />
|
||||
<object-type name="COLUMN" enabled="false" />
|
||||
<object-type name="INDEX" enabled="true" />
|
||||
<object-type name="CONSTRAINT" enabled="true" />
|
||||
<object-type name="DATASET TRIGGER" enabled="true" />
|
||||
<object-type name="DATABASE TRIGGER" enabled="true" />
|
||||
<object-type name="SYNONYM" enabled="false" />
|
||||
<object-type name="SEQUENCE" enabled="true" />
|
||||
<object-type name="PROCEDURE" enabled="true" />
|
||||
<object-type name="FUNCTION" enabled="true" />
|
||||
<object-type name="PACKAGE" enabled="true" />
|
||||
<object-type name="TYPE" enabled="true" />
|
||||
<object-type name="TYPE ATTRIBUTE" enabled="false" />
|
||||
<object-type name="ARGUMENT" enabled="false" />
|
||||
<object-type name="DIMENSION" enabled="false" />
|
||||
<object-type name="CLUSTER" enabled="false" />
|
||||
<object-type name="DBLINK" enabled="true" />
|
||||
</lookup-objects>
|
||||
<force-database-load value="false" />
|
||||
<prompt-connection-selection value="true" />
|
||||
<prompt-schema-selection value="true" />
|
||||
</lookup-filters>
|
||||
</navigation-settings>
|
||||
<dataset-grid-settings>
|
||||
<general>
|
||||
<enable-zooming value="true" />
|
||||
</general>
|
||||
<sorting>
|
||||
<nulls-first value="true" />
|
||||
<max-sorting-columns value="4" />
|
||||
</sorting>
|
||||
<tracking-columns>
|
||||
<columnNames value="" />
|
||||
<visible value="true" />
|
||||
<editable value="false" />
|
||||
</tracking-columns>
|
||||
</dataset-grid-settings>
|
||||
<dataset-editor-settings>
|
||||
<text-editor-popup>
|
||||
<active value="false" />
|
||||
<active-if-empty value="false" />
|
||||
<data-length-threshold value="100" />
|
||||
<popup-delay value="1000" />
|
||||
</text-editor-popup>
|
||||
<values-list-popup>
|
||||
<show-popup-button value="true" />
|
||||
<element-count-threshold value="1000" />
|
||||
<data-length-threshold value="250" />
|
||||
</values-list-popup>
|
||||
<general>
|
||||
<fetch-block-size value="100" />
|
||||
<fetch-timeout value="30" />
|
||||
<trim-whitespaces value="true" />
|
||||
<convert-empty-strings-to-null value="true" />
|
||||
<select-content-on-cell-edit value="true" />
|
||||
<large-value-preview-active value="true" />
|
||||
</general>
|
||||
<filters>
|
||||
<prompt-filter-dialog value="true" />
|
||||
<default-filter-type value="BASIC" />
|
||||
</filters>
|
||||
<qualified-text-editor text-length-threshold="300">
|
||||
<content-types>
|
||||
<content-type name="Text" enabled="true" />
|
||||
<content-type name="XML" enabled="true" />
|
||||
<content-type name="DTD" enabled="true" />
|
||||
<content-type name="HTML" enabled="true" />
|
||||
<content-type name="XHTML" enabled="true" />
|
||||
<content-type name="CSS" enabled="true" />
|
||||
<content-type name="SQL" enabled="true" />
|
||||
<content-type name="PL/SQL" enabled="true" />
|
||||
<content-type name="JavaScript" enabled="true" />
|
||||
<content-type name="JSP" enabled="true" />
|
||||
<content-type name="JSPx" enabled="true" />
|
||||
<content-type name="ASP" enabled="true" />
|
||||
<content-type name="YAML" enabled="true" />
|
||||
<content-type name="Bash" enabled="true" />
|
||||
</content-types>
|
||||
</qualified-text-editor>
|
||||
<record-navigation>
|
||||
<navigation-target value="VIEWER" />
|
||||
</record-navigation>
|
||||
</dataset-editor-settings>
|
||||
<code-editor-settings>
|
||||
<general>
|
||||
<show-object-navigation-gutter value="false" />
|
||||
<show-spec-declaration-navigation-gutter value="true" />
|
||||
</general>
|
||||
<confirmations>
|
||||
<save-changes value="false" />
|
||||
<revert-changes value="true" />
|
||||
</confirmations>
|
||||
</code-editor-settings>
|
||||
<code-completion-settings>
|
||||
<filters>
|
||||
<basic-filter>
|
||||
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
|
||||
<filter-element type="RESERVED_WORD" id="function" selected="true" />
|
||||
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
|
||||
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
|
||||
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
|
||||
<filter-element type="OBJECT" id="schema" selected="true" />
|
||||
<filter-element type="OBJECT" id="role" selected="true" />
|
||||
<filter-element type="OBJECT" id="user" selected="true" />
|
||||
<filter-element type="OBJECT" id="privilege" selected="true" />
|
||||
<user-schema>
|
||||
<filter-element type="OBJECT" id="table" selected="true" />
|
||||
<filter-element type="OBJECT" id="view" selected="true" />
|
||||
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||
<filter-element type="OBJECT" id="index" selected="true" />
|
||||
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||
<filter-element type="OBJECT" id="synonym" selected="false" />
|
||||
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||
<filter-element type="OBJECT" id="function" selected="true" />
|
||||
<filter-element type="OBJECT" id="package" selected="true" />
|
||||
<filter-element type="OBJECT" id="type" selected="true" />
|
||||
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||
</user-schema>
|
||||
<public-schema>
|
||||
<filter-element type="OBJECT" id="table" selected="false" />
|
||||
<filter-element type="OBJECT" id="view" selected="false" />
|
||||
<filter-element type="OBJECT" id="materialized view" selected="false" />
|
||||
<filter-element type="OBJECT" id="index" selected="false" />
|
||||
<filter-element type="OBJECT" id="constraint" selected="false" />
|
||||
<filter-element type="OBJECT" id="trigger" selected="false" />
|
||||
<filter-element type="OBJECT" id="synonym" selected="false" />
|
||||
<filter-element type="OBJECT" id="sequence" selected="false" />
|
||||
<filter-element type="OBJECT" id="procedure" selected="false" />
|
||||
<filter-element type="OBJECT" id="function" selected="false" />
|
||||
<filter-element type="OBJECT" id="package" selected="false" />
|
||||
<filter-element type="OBJECT" id="type" selected="false" />
|
||||
<filter-element type="OBJECT" id="dimension" selected="false" />
|
||||
<filter-element type="OBJECT" id="cluster" selected="false" />
|
||||
<filter-element type="OBJECT" id="dblink" selected="false" />
|
||||
</public-schema>
|
||||
<any-schema>
|
||||
<filter-element type="OBJECT" id="table" selected="true" />
|
||||
<filter-element type="OBJECT" id="view" selected="true" />
|
||||
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||
<filter-element type="OBJECT" id="index" selected="true" />
|
||||
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||
<filter-element type="OBJECT" id="function" selected="true" />
|
||||
<filter-element type="OBJECT" id="package" selected="true" />
|
||||
<filter-element type="OBJECT" id="type" selected="true" />
|
||||
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||
</any-schema>
|
||||
</basic-filter>
|
||||
<extended-filter>
|
||||
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
|
||||
<filter-element type="RESERVED_WORD" id="function" selected="true" />
|
||||
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
|
||||
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
|
||||
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
|
||||
<filter-element type="OBJECT" id="schema" selected="true" />
|
||||
<filter-element type="OBJECT" id="user" selected="true" />
|
||||
<filter-element type="OBJECT" id="role" selected="true" />
|
||||
<filter-element type="OBJECT" id="privilege" selected="true" />
|
||||
<user-schema>
|
||||
<filter-element type="OBJECT" id="table" selected="true" />
|
||||
<filter-element type="OBJECT" id="view" selected="true" />
|
||||
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||
<filter-element type="OBJECT" id="index" selected="true" />
|
||||
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||
<filter-element type="OBJECT" id="function" selected="true" />
|
||||
<filter-element type="OBJECT" id="package" selected="true" />
|
||||
<filter-element type="OBJECT" id="type" selected="true" />
|
||||
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||
</user-schema>
|
||||
<public-schema>
|
||||
<filter-element type="OBJECT" id="table" selected="true" />
|
||||
<filter-element type="OBJECT" id="view" selected="true" />
|
||||
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||
<filter-element type="OBJECT" id="index" selected="true" />
|
||||
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||
<filter-element type="OBJECT" id="function" selected="true" />
|
||||
<filter-element type="OBJECT" id="package" selected="true" />
|
||||
<filter-element type="OBJECT" id="type" selected="true" />
|
||||
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||
</public-schema>
|
||||
<any-schema>
|
||||
<filter-element type="OBJECT" id="table" selected="true" />
|
||||
<filter-element type="OBJECT" id="view" selected="true" />
|
||||
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||
<filter-element type="OBJECT" id="index" selected="true" />
|
||||
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||
<filter-element type="OBJECT" id="function" selected="true" />
|
||||
<filter-element type="OBJECT" id="package" selected="true" />
|
||||
<filter-element type="OBJECT" id="type" selected="true" />
|
||||
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||
</any-schema>
|
||||
</extended-filter>
|
||||
</filters>
|
||||
<sorting enabled="true">
|
||||
<sorting-element type="RESERVED_WORD" id="keyword" />
|
||||
<sorting-element type="RESERVED_WORD" id="datatype" />
|
||||
<sorting-element type="OBJECT" id="column" />
|
||||
<sorting-element type="OBJECT" id="table" />
|
||||
<sorting-element type="OBJECT" id="view" />
|
||||
<sorting-element type="OBJECT" id="materialized view" />
|
||||
<sorting-element type="OBJECT" id="index" />
|
||||
<sorting-element type="OBJECT" id="constraint" />
|
||||
<sorting-element type="OBJECT" id="trigger" />
|
||||
<sorting-element type="OBJECT" id="synonym" />
|
||||
<sorting-element type="OBJECT" id="sequence" />
|
||||
<sorting-element type="OBJECT" id="procedure" />
|
||||
<sorting-element type="OBJECT" id="function" />
|
||||
<sorting-element type="OBJECT" id="package" />
|
||||
<sorting-element type="OBJECT" id="type" />
|
||||
<sorting-element type="OBJECT" id="dimension" />
|
||||
<sorting-element type="OBJECT" id="cluster" />
|
||||
<sorting-element type="OBJECT" id="dblink" />
|
||||
<sorting-element type="OBJECT" id="schema" />
|
||||
<sorting-element type="OBJECT" id="role" />
|
||||
<sorting-element type="OBJECT" id="user" />
|
||||
<sorting-element type="RESERVED_WORD" id="function" />
|
||||
<sorting-element type="RESERVED_WORD" id="parameter" />
|
||||
</sorting>
|
||||
<format>
|
||||
<enforce-code-style-case value="true" />
|
||||
</format>
|
||||
</code-completion-settings>
|
||||
<execution-engine-settings>
|
||||
<statement-execution>
|
||||
<fetch-block-size value="100" />
|
||||
<execution-timeout value="20" />
|
||||
<debug-execution-timeout value="600" />
|
||||
<focus-result value="false" />
|
||||
<prompt-execution value="false" />
|
||||
</statement-execution>
|
||||
<script-execution>
|
||||
<command-line-interfaces />
|
||||
<execution-timeout value="300" />
|
||||
</script-execution>
|
||||
<method-execution>
|
||||
<execution-timeout value="30" />
|
||||
<debug-execution-timeout value="600" />
|
||||
<parameter-history-size value="10" />
|
||||
</method-execution>
|
||||
</execution-engine-settings>
|
||||
<operation-settings>
|
||||
<transactions>
|
||||
<uncommitted-changes>
|
||||
<on-project-close value="ASK" />
|
||||
<on-disconnect value="ASK" />
|
||||
<on-autocommit-toggle value="ASK" />
|
||||
</uncommitted-changes>
|
||||
<multiple-uncommitted-changes>
|
||||
<on-commit value="ASK" />
|
||||
<on-rollback value="ASK" />
|
||||
</multiple-uncommitted-changes>
|
||||
</transactions>
|
||||
<session-browser>
|
||||
<disconnect-session value="ASK" />
|
||||
<kill-session value="ASK" />
|
||||
<reload-on-filter-change value="false" />
|
||||
</session-browser>
|
||||
<compiler>
|
||||
<compile-type value="KEEP" />
|
||||
<compile-dependencies value="ASK" />
|
||||
<always-show-controls value="false" />
|
||||
</compiler>
|
||||
<debugger>
|
||||
<debugger-type value="JDBC" />
|
||||
<use-generic-runners value="true" />
|
||||
</debugger>
|
||||
</operation-settings>
|
||||
<ddl-file-settings>
|
||||
<extensions>
|
||||
<mapping file-type-id="VIEW" extensions="vw" />
|
||||
<mapping file-type-id="TRIGGER" extensions="trg" />
|
||||
<mapping file-type-id="PROCEDURE" extensions="prc" />
|
||||
<mapping file-type-id="FUNCTION" extensions="fnc" />
|
||||
<mapping file-type-id="PACKAGE" extensions="pkg" />
|
||||
<mapping file-type-id="PACKAGE_SPEC" extensions="pks" />
|
||||
<mapping file-type-id="PACKAGE_BODY" extensions="pkb" />
|
||||
<mapping file-type-id="TYPE" extensions="tpe" />
|
||||
<mapping file-type-id="TYPE_SPEC" extensions="tps" />
|
||||
<mapping file-type-id="TYPE_BODY" extensions="tpb" />
|
||||
</extensions>
|
||||
<general>
|
||||
<lookup-ddl-files value="true" />
|
||||
<create-ddl-files value="false" />
|
||||
<synchronize-ddl-files value="true" />
|
||||
<use-qualified-names value="false" />
|
||||
<make-scripts-rerunnable value="true" />
|
||||
</general>
|
||||
</ddl-file-settings>
|
||||
<general-settings>
|
||||
<regional-settings>
|
||||
<date-format value="MEDIUM" />
|
||||
<number-format value="UNGROUPED" />
|
||||
<locale value="SYSTEM_DEFAULT" />
|
||||
<use-custom-formats value="false" />
|
||||
</regional-settings>
|
||||
<environment>
|
||||
<environment-types>
|
||||
<environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" />
|
||||
<environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" />
|
||||
<environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" />
|
||||
<environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" />
|
||||
</environment-types>
|
||||
<visibility-settings>
|
||||
<connection-tabs value="true" />
|
||||
<dialog-headers value="true" />
|
||||
<object-editor-tabs value="true" />
|
||||
<script-editor-tabs value="false" />
|
||||
<execution-result-tabs value="true" />
|
||||
</visibility-settings>
|
||||
</environment>
|
||||
</general-settings>
|
||||
</component>
|
||||
<component name="DBNavigator.Project.StatementExecutionManager">
|
||||
<execution-variables />
|
||||
</component>
|
||||
</project>
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/orm.iml" filepath="$PROJECT_DIR$/.idea/orm.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
|
@ -1,23 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$/angel_orm">
|
||||
<excludeFolder url="file://$MODULE_DIR$/angel_orm/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/angel_orm/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/angel_orm/build" />
|
||||
</content>
|
||||
<content url="file://$MODULE_DIR$/angel_orm_generator">
|
||||
<excludeFolder url="file://$MODULE_DIR$/angel_orm_generator/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/angel_orm_generator/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/angel_orm_generator/build" />
|
||||
</content>
|
||||
<content url="file://$MODULE_DIR$/external">
|
||||
<excludeFolder url="file://$MODULE_DIR$/external/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/external/build" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="Dart SDK" level="project" />
|
||||
<orderEntry type="library" name="Dart Packages" level="project" />
|
||||
</component>
|
||||
</module>
|
|
@ -1,6 +0,0 @@
|
|||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="tests in has_one_test" type="DartTestRunConfigurationType" factoryName="Dart Test" folderName="leg" singleton="true">
|
||||
<option name="filePath" value="$PROJECT_DIR$/angel_orm_generator/test/has_one_test.dart" />
|
||||
<method />
|
||||
</configuration>
|
||||
</component>
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
2
packages/orm/angel_migration/AUTHORS.md
Normal file
2
packages/orm/angel_migration/AUTHORS.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
Tobe O <thosakwe@gmail.com>
|
||||
Thomas Hii <thomashii@dukefirehawk.com>
|
|
@ -1,3 +1,9 @@
|
|||
# 4.0.0
|
||||
* Migrated to support Dart SDK 2.12.x NNBD
|
||||
|
||||
# 3.0.0
|
||||
* Migrated to work with Dart SDK 2.12.x Non NNBD
|
||||
|
||||
# 2.0.0
|
||||
* Bump to `2.0.0`.
|
||||
|
||||
|
|
2
packages/orm/angel_migration_runner/AUTHORS.md
Normal file
2
packages/orm/angel_migration_runner/AUTHORS.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
Tobe O <thosakwe@gmail.com>
|
||||
Thomas Hii <thomashii@dukefirehawk.com>
|
|
@ -1,3 +1,9 @@
|
|||
# 4.0.0
|
||||
* Migrated to support Dart SDK 2.12.x NNBD
|
||||
|
||||
# 3.0.0
|
||||
* Migrated to work with Dart SDK 2.12.x Non NNBD
|
||||
|
||||
# 2.0.0
|
||||
* Bump to `2.0.0`.
|
||||
|
||||
|
|
2
packages/orm/angel_orm/AUTHORS.md
Normal file
2
packages/orm/angel_orm/AUTHORS.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
Tobe O <thosakwe@gmail.com>
|
||||
Thomas Hii <thomashii@dukefirehawk.com>
|
|
@ -1,3 +1,9 @@
|
|||
# 4.0.0
|
||||
* Migrated to support Dart SDK 2.12.x NNBD
|
||||
|
||||
# 3.0.0
|
||||
* Migrated to work with Dart SDK 2.12.x Non NNBD
|
||||
|
||||
# 2.1.0-beta.3
|
||||
* Remove parentheses from `AS` when renaming raw `expressions`.
|
||||
|
||||
|
|
|
@ -7,15 +7,15 @@ import 'package:angel_serialize/angel_serialize.dart';
|
|||
part 'main.g.dart';
|
||||
part 'main.serializer.g.dart';
|
||||
|
||||
main() async {
|
||||
void main() async {
|
||||
var query = EmployeeQuery()
|
||||
..where.firstName.equals('Rich')
|
||||
..where.lastName.equals('Person')
|
||||
..orWhere((w) => w.salary.greaterThanOrEqualTo(75000))
|
||||
..where?.firstName.equals('Rich')
|
||||
..where?.lastName.equals('Person')
|
||||
..orWhere((w) => w?.salary.greaterThanOrEqualTo(75000))
|
||||
..join('companies', 'company_id', 'id');
|
||||
|
||||
var richPerson = await query.getOne(_FakeExecutor());
|
||||
print(richPerson.toJson());
|
||||
print(richPerson?.toJson());
|
||||
}
|
||||
|
||||
class _FakeExecutor extends QueryExecutor {
|
||||
|
@ -23,7 +23,7 @@ class _FakeExecutor extends QueryExecutor {
|
|||
|
||||
@override
|
||||
Future<List<List>> query(
|
||||
String tableName, String query, Map<String, dynamic> substitutionValues,
|
||||
String tableName, String? query, Map<String, dynamic> substitutionValues,
|
||||
[returningFields]) async {
|
||||
var now = DateTime.now();
|
||||
print(
|
||||
|
@ -42,25 +42,25 @@ class _FakeExecutor extends QueryExecutor {
|
|||
@orm
|
||||
@serializable
|
||||
abstract class _Employee extends Model {
|
||||
String get firstName;
|
||||
String? get firstName;
|
||||
|
||||
String get lastName;
|
||||
String? get lastName;
|
||||
|
||||
double get salary;
|
||||
double? get salary;
|
||||
}
|
||||
|
||||
class EmployeeQuery extends Query<Employee, EmployeeQueryWhere> {
|
||||
class EmployeeQuery extends Query<Employee, EmployeeQueryWhere?> {
|
||||
@override
|
||||
final QueryValues values = MapQueryValues();
|
||||
|
||||
EmployeeQueryWhere _where;
|
||||
EmployeeQueryWhere? _where;
|
||||
|
||||
EmployeeQuery() {
|
||||
_where = EmployeeQueryWhere(this);
|
||||
}
|
||||
|
||||
@override
|
||||
EmployeeQueryWhere get where => _where;
|
||||
EmployeeQueryWhere? get where => _where;
|
||||
|
||||
@override
|
||||
String get tableName => 'employees';
|
||||
|
|
|
@ -17,30 +17,30 @@ class Employee extends _Employee {
|
|||
this.updatedAt});
|
||||
|
||||
@override
|
||||
final String id;
|
||||
final String? id;
|
||||
|
||||
@override
|
||||
final String firstName;
|
||||
final String? firstName;
|
||||
|
||||
@override
|
||||
final String lastName;
|
||||
final String? lastName;
|
||||
|
||||
@override
|
||||
final double salary;
|
||||
final double? salary;
|
||||
|
||||
@override
|
||||
final DateTime createdAt;
|
||||
final DateTime? createdAt;
|
||||
|
||||
@override
|
||||
final DateTime updatedAt;
|
||||
final DateTime? updatedAt;
|
||||
|
||||
Employee copyWith(
|
||||
{String id,
|
||||
String firstName,
|
||||
String lastName,
|
||||
double salary,
|
||||
DateTime createdAt,
|
||||
DateTime updatedAt}) {
|
||||
{String? id,
|
||||
String? firstName,
|
||||
String? lastName,
|
||||
double? salary,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt}) {
|
||||
return Employee(
|
||||
id: id ?? this.id,
|
||||
firstName: firstName ?? this.firstName,
|
||||
|
|
|
@ -9,26 +9,23 @@ part of 'main.dart';
|
|||
abstract class EmployeeSerializer {
|
||||
static Employee fromMap(Map map) {
|
||||
return Employee(
|
||||
id: map['id'] as String,
|
||||
firstName: map['first_name'] as String,
|
||||
lastName: map['last_name'] as String,
|
||||
salary: map['salary'] as double,
|
||||
id: map['id'] as String?,
|
||||
firstName: map['first_name'] as String?,
|
||||
lastName: map['last_name'] as String?,
|
||||
salary: map['salary'] as double?,
|
||||
createdAt: map['created_at'] != null
|
||||
? (map['created_at'] is DateTime
|
||||
? (map['created_at'] as DateTime)
|
||||
? (map['created_at'] as DateTime?)
|
||||
: DateTime.parse(map['created_at'].toString()))
|
||||
: null,
|
||||
updatedAt: map['updated_at'] != null
|
||||
? (map['updated_at'] is DateTime
|
||||
? (map['updated_at'] as DateTime)
|
||||
? (map['updated_at'] as DateTime?)
|
||||
: DateTime.parse(map['updated_at'].toString()))
|
||||
: null);
|
||||
}
|
||||
|
||||
static Map<String, dynamic> toMap(Employee model) {
|
||||
if (model == null) {
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
'id': model.id,
|
||||
'first_name': model.firstName,
|
||||
|
|
|
@ -17,7 +17,7 @@ class Orm {
|
|||
/// The name of the table to query.
|
||||
///
|
||||
/// Inferred if not present.
|
||||
final String tableName;
|
||||
final String? tableName;
|
||||
|
||||
/// Whether to generate migrations for this model.
|
||||
///
|
||||
|
|
|
@ -8,9 +8,9 @@ final DateFormat dateYmdHms = DateFormat('yyyy-MM-dd HH:mm:ss');
|
|||
abstract class SqlExpressionBuilder<T> {
|
||||
final Query query;
|
||||
final String columnName;
|
||||
String _cast;
|
||||
String? _cast;
|
||||
bool _isProperty = false;
|
||||
String _substitution;
|
||||
String? _substitution;
|
||||
|
||||
SqlExpressionBuilder(this.query, this.columnName);
|
||||
|
||||
|
@ -21,15 +21,15 @@ abstract class SqlExpressionBuilder<T> {
|
|||
|
||||
bool get hasValue;
|
||||
|
||||
String compile();
|
||||
String? compile();
|
||||
}
|
||||
|
||||
class NumericSqlExpressionBuilder<T extends num>
|
||||
extends SqlExpressionBuilder<T> {
|
||||
bool _hasValue = false;
|
||||
String _op = '=';
|
||||
String _raw;
|
||||
T _value;
|
||||
String? _raw;
|
||||
T? _value;
|
||||
|
||||
NumericSqlExpressionBuilder(Query query, String columnName)
|
||||
: super(query, columnName);
|
||||
|
@ -45,7 +45,7 @@ class NumericSqlExpressionBuilder<T extends num>
|
|||
}
|
||||
|
||||
@override
|
||||
String compile() {
|
||||
String? compile() {
|
||||
if (_raw != null) return _raw;
|
||||
if (_value == null) return null;
|
||||
var v = _value.toString();
|
||||
|
@ -121,8 +121,8 @@ class EnumSqlExpressionBuilder<T> extends SqlExpressionBuilder<T> {
|
|||
final int Function(T) _getValue;
|
||||
bool _hasValue = false;
|
||||
String _op = '=';
|
||||
String _raw;
|
||||
int _value;
|
||||
String? _raw;
|
||||
int? _value;
|
||||
|
||||
EnumSqlExpressionBuilder(Query query, String columnName, this._getValue)
|
||||
: super(query, columnName);
|
||||
|
@ -141,7 +141,7 @@ class EnumSqlExpressionBuilder<T> extends SqlExpressionBuilder<T> {
|
|||
UnsupportedError('Enums do not support this operation.');
|
||||
|
||||
@override
|
||||
String compile() {
|
||||
String? compile() {
|
||||
if (_raw != null) return _raw;
|
||||
if (_value == null) return null;
|
||||
return '$_op $_value';
|
||||
|
@ -182,7 +182,7 @@ class EnumSqlExpressionBuilder<T> extends SqlExpressionBuilder<T> {
|
|||
|
||||
class StringSqlExpressionBuilder extends SqlExpressionBuilder<String> {
|
||||
bool _hasValue = false;
|
||||
String _op = '=', _raw, _value;
|
||||
String? _op = '=', _raw, _value;
|
||||
|
||||
StringSqlExpressionBuilder(Query query, String columnName)
|
||||
: super(query, columnName);
|
||||
|
@ -203,7 +203,7 @@ class StringSqlExpressionBuilder extends SqlExpressionBuilder<String> {
|
|||
}
|
||||
|
||||
@override
|
||||
String compile() {
|
||||
String? compile() {
|
||||
if (_raw != null) return _raw;
|
||||
if (_value == null) return null;
|
||||
return "$_op @$substitution";
|
||||
|
@ -232,7 +232,7 @@ class StringSqlExpressionBuilder extends SqlExpressionBuilder<String> {
|
|||
/// carNameBuilder.like('%Mazda%');
|
||||
/// carNameBuilder.like((name) => 'Mazda %$name%');
|
||||
/// ```
|
||||
void like(String pattern, {String Function(String) sanitize}) {
|
||||
void like(String pattern, {String Function(String)? sanitize}) {
|
||||
sanitize ??= (s) => pattern;
|
||||
_raw = 'LIKE \'' + sanitize('@$substitution') + '\'';
|
||||
query.substitutionValues[substitution] = pattern;
|
||||
|
@ -287,8 +287,8 @@ class StringSqlExpressionBuilder extends SqlExpressionBuilder<String> {
|
|||
|
||||
class BooleanSqlExpressionBuilder extends SqlExpressionBuilder<bool> {
|
||||
bool _hasValue = false;
|
||||
String _op = '=', _raw;
|
||||
bool _value;
|
||||
String? _op = '=', _raw;
|
||||
bool? _value;
|
||||
|
||||
BooleanSqlExpressionBuilder(Query query, String columnName)
|
||||
: super(query, columnName);
|
||||
|
@ -304,10 +304,10 @@ class BooleanSqlExpressionBuilder extends SqlExpressionBuilder<bool> {
|
|||
}
|
||||
|
||||
@override
|
||||
String compile() {
|
||||
String? compile() {
|
||||
if (_raw != null) return _raw;
|
||||
if (_value == null) return null;
|
||||
var v = _value ? 'TRUE' : 'FALSE';
|
||||
var v = _value! ? 'TRUE' : 'FALSE';
|
||||
if (_cast != null) v = 'CAST ($v AS $_cast)';
|
||||
return '$_op $v';
|
||||
}
|
||||
|
@ -336,9 +336,14 @@ class BooleanSqlExpressionBuilder extends SqlExpressionBuilder<bool> {
|
|||
}
|
||||
|
||||
class DateTimeSqlExpressionBuilder extends SqlExpressionBuilder<DateTime> {
|
||||
NumericSqlExpressionBuilder<int> _year, _month, _day, _hour, _minute, _second;
|
||||
NumericSqlExpressionBuilder<int>? _year,
|
||||
_month,
|
||||
_day,
|
||||
_hour,
|
||||
_minute,
|
||||
_second;
|
||||
|
||||
String _raw;
|
||||
String? _raw;
|
||||
|
||||
DateTimeSqlExpressionBuilder(Query query, String columnName)
|
||||
: super(query, columnName);
|
||||
|
@ -431,25 +436,25 @@ class DateTimeSqlExpressionBuilder extends SqlExpressionBuilder<DateTime> {
|
|||
}
|
||||
|
||||
@override
|
||||
String compile() {
|
||||
String? compile() {
|
||||
if (_raw?.isNotEmpty == true) return _raw;
|
||||
List<String> parts = [];
|
||||
if (year?.hasValue == true) {
|
||||
var parts = <String>[];
|
||||
if (year.hasValue == true) {
|
||||
parts.add('YEAR($columnName) ${year.compile()}');
|
||||
}
|
||||
if (month?.hasValue == true) {
|
||||
if (month.hasValue == true) {
|
||||
parts.add('MONTH($columnName) ${month.compile()}');
|
||||
}
|
||||
if (day?.hasValue == true) {
|
||||
if (day.hasValue == true) {
|
||||
parts.add('DAY($columnName) ${day.compile()}');
|
||||
}
|
||||
if (hour?.hasValue == true) {
|
||||
if (hour.hasValue == true) {
|
||||
parts.add('HOUR($columnName) ${hour.compile()}');
|
||||
}
|
||||
if (minute?.hasValue == true) {
|
||||
if (minute.hasValue == true) {
|
||||
parts.add('MINUTE($columnName) ${minute.compile()}');
|
||||
}
|
||||
if (second?.hasValue == true) {
|
||||
if (second.hasValue == true) {
|
||||
parts.add('SECOND($columnName) ${second.compile()}');
|
||||
}
|
||||
|
||||
|
@ -460,9 +465,9 @@ class DateTimeSqlExpressionBuilder extends SqlExpressionBuilder<DateTime> {
|
|||
abstract class JsonSqlExpressionBuilder<T, K> extends SqlExpressionBuilder<T> {
|
||||
final List<JsonSqlExpressionBuilderProperty> _properties = [];
|
||||
bool _hasValue = false;
|
||||
T _value;
|
||||
String _op;
|
||||
String _raw;
|
||||
T? _value;
|
||||
String? _op;
|
||||
String? _raw;
|
||||
|
||||
JsonSqlExpressionBuilder(Query query, String columnName)
|
||||
: super(query, columnName);
|
||||
|
@ -480,7 +485,7 @@ abstract class JsonSqlExpressionBuilder<T, K> extends SqlExpressionBuilder<T> {
|
|||
@override
|
||||
bool get hasValue => _hasValue || _properties.any((p) => p.hasValue);
|
||||
|
||||
_encodeValue(T v) => v;
|
||||
T? _encodeValue(T? v) => v;
|
||||
|
||||
bool _change(String op, T value) {
|
||||
_raw = null;
|
||||
|
@ -501,7 +506,7 @@ abstract class JsonSqlExpressionBuilder<T, K> extends SqlExpressionBuilder<T> {
|
|||
}
|
||||
|
||||
@override
|
||||
String compile() {
|
||||
String? compile() {
|
||||
var s = _compile();
|
||||
if (!_properties.any((p) => p.hasValue)) return s;
|
||||
s ??= '';
|
||||
|
@ -515,7 +520,7 @@ abstract class JsonSqlExpressionBuilder<T, K> extends SqlExpressionBuilder<T> {
|
|||
s ??= '';
|
||||
|
||||
if (p.typed is! DateTimeSqlExpressionBuilder) {
|
||||
s += '${p.typed.columnName} ';
|
||||
s += '${p.typed!.columnName} ';
|
||||
}
|
||||
|
||||
s += c;
|
||||
|
@ -526,7 +531,7 @@ abstract class JsonSqlExpressionBuilder<T, K> extends SqlExpressionBuilder<T> {
|
|||
return s;
|
||||
}
|
||||
|
||||
String _compile() {
|
||||
String? _compile() {
|
||||
if (_raw != null) return _raw;
|
||||
if (_value == null) return null;
|
||||
return "::jsonb $_op @$substitution::jsonb";
|
||||
|
@ -564,7 +569,7 @@ class ListSqlExpressionBuilder extends JsonSqlExpressionBuilder<List, int> {
|
|||
: super(query, columnName);
|
||||
|
||||
@override
|
||||
_encodeValue(List v) => json.encode(v);
|
||||
List<dynamic>? _encodeValue(List<dynamic>? v) => [json.encode(v)];
|
||||
|
||||
@override
|
||||
JsonSqlExpressionBuilderProperty _property(int name) {
|
||||
|
@ -576,27 +581,27 @@ class JsonSqlExpressionBuilderProperty {
|
|||
final JsonSqlExpressionBuilder builder;
|
||||
final String name;
|
||||
final bool isInt;
|
||||
SqlExpressionBuilder _typed;
|
||||
SqlExpressionBuilder? _typed;
|
||||
|
||||
JsonSqlExpressionBuilderProperty(this.builder, this.name, this.isInt);
|
||||
|
||||
SqlExpressionBuilder get typed => _typed;
|
||||
SqlExpressionBuilder? get typed => _typed;
|
||||
|
||||
bool get hasValue => _typed?.hasValue == true;
|
||||
|
||||
String compile() => _typed?.compile();
|
||||
String? compile() => _typed?.compile();
|
||||
|
||||
T _set<T extends SqlExpressionBuilder>(T Function() value) {
|
||||
T? _set<T extends SqlExpressionBuilder?>(T Function() value) {
|
||||
if (_typed is T) {
|
||||
return _typed as T;
|
||||
return _typed as T?;
|
||||
} else if (_typed != null) {
|
||||
throw StateError(
|
||||
'$nameString is already typed as $_typed, and cannot be changed.');
|
||||
} else {
|
||||
_typed = value()
|
||||
.._cast = 'text'
|
||||
?.._cast = 'text'
|
||||
.._isProperty = true;
|
||||
return _typed as T;
|
||||
return _typed as T?;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -608,44 +613,56 @@ class JsonSqlExpressionBuilderProperty {
|
|||
void get isNotNull {
|
||||
builder
|
||||
.._hasValue = true
|
||||
.._raw ??= ''
|
||||
.._raw += "$nameString IS NOT NULL";
|
||||
.._raw ??= '';
|
||||
|
||||
var r = builder._raw;
|
||||
if (r != null) {
|
||||
builder._raw = r + '$nameString IS NOT NULL';
|
||||
} else {
|
||||
builder._raw = '$nameString IS NOT NULL';
|
||||
}
|
||||
}
|
||||
|
||||
void get isNull {
|
||||
builder
|
||||
.._hasValue = true
|
||||
.._raw ??= ''
|
||||
.._raw += "$nameString IS NULL";
|
||||
.._raw ??= '';
|
||||
|
||||
var r = builder._raw;
|
||||
if (r != null) {
|
||||
builder._raw = r + '$nameString IS NULL';
|
||||
} else {
|
||||
builder._raw = '$nameString IS NULL';
|
||||
}
|
||||
}
|
||||
|
||||
StringSqlExpressionBuilder get asString {
|
||||
StringSqlExpressionBuilder? get asString {
|
||||
return _set(() => StringSqlExpressionBuilder(builder.query, nameString));
|
||||
}
|
||||
|
||||
BooleanSqlExpressionBuilder get asBool {
|
||||
BooleanSqlExpressionBuilder? get asBool {
|
||||
return _set(() => BooleanSqlExpressionBuilder(builder.query, nameString));
|
||||
}
|
||||
|
||||
DateTimeSqlExpressionBuilder get asDateTime {
|
||||
DateTimeSqlExpressionBuilder? get asDateTime {
|
||||
return _set(() => DateTimeSqlExpressionBuilder(builder.query, nameString));
|
||||
}
|
||||
|
||||
NumericSqlExpressionBuilder<double> get asDouble {
|
||||
NumericSqlExpressionBuilder<double>? get asDouble {
|
||||
return _set(
|
||||
() => NumericSqlExpressionBuilder<double>(builder.query, nameString));
|
||||
}
|
||||
|
||||
NumericSqlExpressionBuilder<int> get asInt {
|
||||
NumericSqlExpressionBuilder<int>? get asInt {
|
||||
return _set(
|
||||
() => NumericSqlExpressionBuilder<int>(builder.query, nameString));
|
||||
}
|
||||
|
||||
MapSqlExpressionBuilder get asMap {
|
||||
MapSqlExpressionBuilder? get asMap {
|
||||
return _set(() => MapSqlExpressionBuilder(builder.query, nameString));
|
||||
}
|
||||
|
||||
ListSqlExpressionBuilder get asList {
|
||||
ListSqlExpressionBuilder? get asList {
|
||||
return _set(() => ListSqlExpressionBuilder(builder.query, nameString));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,12 +5,12 @@ import 'query.dart';
|
|||
class JoinBuilder {
|
||||
final JoinType type;
|
||||
final Query from;
|
||||
final String key, value, op, alias;
|
||||
final String? key, value, op, alias;
|
||||
final bool aliasAllFields;
|
||||
|
||||
/// A callback to produces the expression to join against, i.e.
|
||||
/// a table name, or the result of compiling a query.
|
||||
final String Function() to;
|
||||
final String? Function() to;
|
||||
final List<String> additionalFields;
|
||||
|
||||
JoinBuilder(this.type, this.from, this.to, this.key, this.value,
|
||||
|
@ -39,7 +39,7 @@ class JoinBuilder {
|
|||
return right;
|
||||
}
|
||||
|
||||
String compile(Set<String> trampoline) {
|
||||
String? compile(Set<String>? trampoline) {
|
||||
var compiledTo = to();
|
||||
if (compiledTo == null) return null;
|
||||
var b = StringBuffer();
|
||||
|
|
|
@ -18,16 +18,16 @@ class Column {
|
|||
final bool isNullable;
|
||||
|
||||
/// Specifies the length of a `VARCHAR`.
|
||||
final int length;
|
||||
final int? length;
|
||||
|
||||
/// Explicitly defines a SQL type for this column.
|
||||
final ColumnType type;
|
||||
final ColumnType? type;
|
||||
|
||||
/// Specifies what kind of index this column is, if any.
|
||||
final IndexType indexType;
|
||||
|
||||
/// A custom SQL expression to execute, instead of a named column.
|
||||
final String expression;
|
||||
final String? expression;
|
||||
|
||||
const Column(
|
||||
{this.isNullable = true,
|
||||
|
@ -41,7 +41,7 @@ class Column {
|
|||
}
|
||||
|
||||
class PrimaryKey extends Column {
|
||||
const PrimaryKey({ColumnType columnType})
|
||||
const PrimaryKey({ColumnType? columnType})
|
||||
: super(type: columnType, indexType: IndexType.primaryKey);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,21 +8,21 @@ import 'query_values.dart';
|
|||
import 'query_where.dart';
|
||||
|
||||
/// A SQL `SELECT` query builder.
|
||||
abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
||||
abstract class Query<T, Where extends QueryWhere?> extends QueryBase<T> {
|
||||
final List<JoinBuilder> _joins = [];
|
||||
final Map<String, int> _names = {};
|
||||
final List<OrderBy> _orderBy = [];
|
||||
|
||||
// An optional "parent query". If provided, [reserveName] will operate in
|
||||
// the parent's context.
|
||||
final Query parent;
|
||||
final Query? parent;
|
||||
|
||||
/// A map of field names to explicit SQL expressions. The expressions will be aliased
|
||||
/// to the given names.
|
||||
final Map<String, String> expressions = {};
|
||||
|
||||
String _crossJoin, _groupBy;
|
||||
int _limit, _offset;
|
||||
String? _crossJoin, _groupBy;
|
||||
int? _limit, _offset;
|
||||
|
||||
Query({this.parent});
|
||||
|
||||
|
@ -52,10 +52,19 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
/// Returns a unique version of [name], which will not produce a collision within
|
||||
/// the context of this [query].
|
||||
String reserveName(String name) {
|
||||
if (parent != null) return parent.reserveName(name);
|
||||
var n = _names[name] ??= 0;
|
||||
_names[name]++;
|
||||
return n == 0 ? name : '${name}$n';
|
||||
if (parent != null) {
|
||||
return parent!.reserveName(name);
|
||||
}
|
||||
// var n = _names[name] ??= 0;
|
||||
// _names[name]++;
|
||||
var n = 0;
|
||||
var nn = _names[name];
|
||||
if (nn != null) {
|
||||
n = nn;
|
||||
nn++;
|
||||
_names[name] = nn;
|
||||
}
|
||||
return n == 0 ? name : '$name$n';
|
||||
}
|
||||
|
||||
/// Makes a [Where] clause.
|
||||
|
@ -67,27 +76,27 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
/// Determines whether this query can be compiled.
|
||||
///
|
||||
/// Used to prevent ambiguities in joins.
|
||||
bool canCompile(Set<String> trampoline) => true;
|
||||
bool canCompile(Set<String>? trampoline) => true;
|
||||
|
||||
/// Shorthand for calling [where].or with a [Where] clause.
|
||||
void andWhere(void Function(Where) f) {
|
||||
var w = newWhereClause();
|
||||
f(w);
|
||||
where.and(w);
|
||||
where?.and(w);
|
||||
}
|
||||
|
||||
/// Shorthand for calling [where].or with a [Where] clause.
|
||||
void notWhere(void Function(Where) f) {
|
||||
var w = newWhereClause();
|
||||
f(w);
|
||||
where.not(w);
|
||||
where?.not(w);
|
||||
}
|
||||
|
||||
/// Shorthand for calling [where].or with a [Where] clause.
|
||||
void orWhere(void Function(Where) f) {
|
||||
var w = newWhereClause();
|
||||
f(w);
|
||||
where.or(w);
|
||||
where?.or(w);
|
||||
}
|
||||
|
||||
/// Limit the number of rows to return.
|
||||
|
@ -115,12 +124,12 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
_crossJoin = tableName;
|
||||
}
|
||||
|
||||
String _joinAlias(Set<String> trampoline) {
|
||||
String _joinAlias(Set<String>? trampoline) {
|
||||
int i = _joins.length;
|
||||
|
||||
while (true) {
|
||||
var a = 'a$i';
|
||||
if (trampoline.add(a)) {
|
||||
if (trampoline!.add(a)) {
|
||||
return a;
|
||||
} else {
|
||||
i++;
|
||||
|
@ -128,7 +137,7 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
}
|
||||
}
|
||||
|
||||
String Function() _compileJoin(tableName, Set<String> trampoline) {
|
||||
String? Function() _compileJoin(tableName, Set<String>? trampoline) {
|
||||
if (tableName is String) {
|
||||
return () => tableName;
|
||||
} else if (tableName is Query) {
|
||||
|
@ -145,7 +154,7 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
|
||||
void _makeJoin(
|
||||
tableName,
|
||||
Set<String> trampoline,
|
||||
Set<String>? trampoline,
|
||||
JoinType type,
|
||||
String localKey,
|
||||
String foreignKey,
|
||||
|
@ -180,7 +189,7 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
void join(tableName, String localKey, String foreignKey,
|
||||
{String op = '=',
|
||||
List<String> additionalFields = const [],
|
||||
Set<String> trampoline}) {
|
||||
Set<String>? trampoline}) {
|
||||
_makeJoin(tableName, trampoline, JoinType.inner, localKey, foreignKey, op,
|
||||
additionalFields);
|
||||
}
|
||||
|
@ -189,7 +198,7 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
void leftJoin(tableName, String localKey, String foreignKey,
|
||||
{String op = '=',
|
||||
List<String> additionalFields = const [],
|
||||
Set<String> trampoline}) {
|
||||
Set<String>? trampoline}) {
|
||||
_makeJoin(tableName, trampoline, JoinType.left, localKey, foreignKey, op,
|
||||
additionalFields);
|
||||
}
|
||||
|
@ -198,7 +207,7 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
void rightJoin(tableName, String localKey, String foreignKey,
|
||||
{String op = '=',
|
||||
List<String> additionalFields = const [],
|
||||
Set<String> trampoline}) {
|
||||
Set<String>? trampoline}) {
|
||||
_makeJoin(tableName, trampoline, JoinType.right, localKey, foreignKey, op,
|
||||
additionalFields);
|
||||
}
|
||||
|
@ -207,7 +216,7 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
void fullOuterJoin(tableName, String localKey, String foreignKey,
|
||||
{String op = '=',
|
||||
List<String> additionalFields = const [],
|
||||
Set<String> trampoline}) {
|
||||
Set<String>? trampoline}) {
|
||||
_makeJoin(tableName, trampoline, JoinType.full, localKey, foreignKey, op,
|
||||
additionalFields);
|
||||
}
|
||||
|
@ -216,17 +225,17 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
void selfJoin(tableName, String localKey, String foreignKey,
|
||||
{String op = '=',
|
||||
List<String> additionalFields = const [],
|
||||
Set<String> trampoline}) {
|
||||
Set<String>? trampoline}) {
|
||||
_makeJoin(tableName, trampoline, JoinType.self, localKey, foreignKey, op,
|
||||
additionalFields);
|
||||
}
|
||||
|
||||
@override
|
||||
String compile(Set<String> trampoline,
|
||||
String? compile(Set<String>? trampoline,
|
||||
{bool includeTableName = false,
|
||||
String preamble,
|
||||
String? preamble,
|
||||
bool withFields = true,
|
||||
String fromQuery}) {
|
||||
String? fromQuery}) {
|
||||
// One table MAY appear multiple times in a query.
|
||||
if (!canCompile(trampoline)) {
|
||||
return null;
|
||||
|
@ -237,13 +246,13 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
b.write(' ');
|
||||
List<String> f;
|
||||
|
||||
var compiledJoins = <JoinBuilder, String>{};
|
||||
var compiledJoins = <JoinBuilder, String?>{};
|
||||
|
||||
if (fields == null) {
|
||||
f = ['*'];
|
||||
} else {
|
||||
f = List<String>.from(fields.map((s) {
|
||||
var ss = includeTableName ? '$tableName.$s' : s;
|
||||
String? ss = includeTableName ? '$tableName.$s' : s;
|
||||
if (expressions.containsKey(s)) {
|
||||
// ss = '(' + expressions[s] + ')';
|
||||
ss = expressions[s];
|
||||
|
@ -297,8 +306,10 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
}
|
||||
|
||||
var whereClause =
|
||||
where.compile(tableName: includeTableName ? tableName : null);
|
||||
if (whereClause.isNotEmpty) b.write(' WHERE $whereClause');
|
||||
where?.compile(tableName: includeTableName ? tableName : null);
|
||||
if (whereClause?.isNotEmpty == true) {
|
||||
b.write(' WHERE $whereClause');
|
||||
}
|
||||
if (_groupBy != null) b.write(' GROUP BY $_groupBy');
|
||||
for (var item in _orderBy) {
|
||||
b.write(' ORDER BY ${item.compile()}');
|
||||
|
@ -309,13 +320,13 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<T> getOne(QueryExecutor executor) {
|
||||
Future<T?> getOne(QueryExecutor executor) {
|
||||
//limit(1);
|
||||
return super.getOne(executor);
|
||||
}
|
||||
|
||||
Future<List<T>> delete(QueryExecutor executor) {
|
||||
var sql = compile(Set(), preamble: 'DELETE', withFields: false);
|
||||
var sql = compile({}, preamble: 'DELETE', withFields: false);
|
||||
|
||||
if (_joins.isEmpty) {
|
||||
return executor
|
||||
|
@ -334,11 +345,11 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
}
|
||||
}
|
||||
|
||||
Future<T> deleteOne(QueryExecutor executor) {
|
||||
Future<T?> deleteOne(QueryExecutor executor) {
|
||||
return delete(executor).then((it) => it.isEmpty ? null : it.first);
|
||||
}
|
||||
|
||||
Future<T> insert(QueryExecutor executor) {
|
||||
Future<T?> insert(QueryExecutor executor) {
|
||||
var insertion = values.compileInsert(this, tableName);
|
||||
|
||||
if (insertion == null) {
|
||||
|
@ -346,7 +357,7 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
} else {
|
||||
// TODO: How to do this in a non-Postgres DB?
|
||||
var returning = fields.map(adornWithTableName).join(', ');
|
||||
var sql = compile(Set());
|
||||
var sql = compile({})!;
|
||||
sql = 'WITH $tableName as ($insertion RETURNING $returning) ' + sql;
|
||||
return executor
|
||||
.query(tableName, sql, substitutionValues)
|
||||
|
@ -362,12 +373,14 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
throw StateError('No values have been specified for update.');
|
||||
} else {
|
||||
updateSql.write(' $valuesClause');
|
||||
var whereClause = where.compile();
|
||||
if (whereClause.isNotEmpty) updateSql.write(' WHERE $whereClause');
|
||||
var whereClause = where?.compile();
|
||||
if (whereClause?.isNotEmpty == true) {
|
||||
updateSql.write(' WHERE $whereClause');
|
||||
}
|
||||
if (_limit != null) updateSql.write(' LIMIT $_limit');
|
||||
|
||||
var returning = fields.map(adornWithTableName).join(', ');
|
||||
var sql = compile(Set());
|
||||
var sql = compile({})!;
|
||||
sql = 'WITH $tableName as ($updateSql RETURNING $returning) ' + sql;
|
||||
|
||||
return executor
|
||||
|
@ -376,7 +389,7 @@ abstract class Query<T, Where extends QueryWhere> extends QueryBase<T> {
|
|||
}
|
||||
}
|
||||
|
||||
Future<T> updateOne(QueryExecutor executor) {
|
||||
Future<T?> updateOne(QueryExecutor executor) {
|
||||
return update(executor).then((it) => it.isEmpty ? null : it.first);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,19 +32,21 @@ abstract class QueryBase<T> {
|
|||
}
|
||||
}).join(', ');
|
||||
|
||||
String compile(Set<String> trampoline,
|
||||
{bool includeTableName = false, String preamble, bool withFields = true});
|
||||
String? compile(Set<String> trampoline,
|
||||
{bool includeTableName = false,
|
||||
String? preamble,
|
||||
bool withFields = true});
|
||||
|
||||
T deserialize(List row);
|
||||
|
||||
Future<List<T>> get(QueryExecutor executor) async {
|
||||
var sql = compile(Set());
|
||||
var sql = compile({});
|
||||
return executor
|
||||
.query(tableName, sql, substitutionValues)
|
||||
.then((it) => it.map(deserialize).toList());
|
||||
}
|
||||
|
||||
Future<T> getOne(QueryExecutor executor) {
|
||||
Future<T?> getOne(QueryExecutor executor) {
|
||||
return get(executor).then((it) => it.isEmpty ? null : it.first);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,8 +8,8 @@ abstract class QueryExecutor {
|
|||
|
||||
/// Executes a single query.
|
||||
Future<List<List>> query(
|
||||
String tableName, String query, Map<String, dynamic> substitutionValues,
|
||||
[List<String> returningFields]);
|
||||
String tableName, String? query, Map<String, dynamic> substitutionValues,
|
||||
[List<String>? returningFields]);
|
||||
|
||||
/// Enters a database transaction, performing the actions within,
|
||||
/// and returning the results of [f].
|
||||
|
|
|
@ -14,7 +14,7 @@ abstract class QueryValues {
|
|||
}
|
||||
}
|
||||
|
||||
String compileInsert(Query query, String tableName) {
|
||||
String? compileInsert(Query query, String tableName) {
|
||||
var data = Map<String, dynamic>.from(toMap());
|
||||
var keys = data.keys.toList();
|
||||
keys.where((k) => !query.fields.contains(k)).forEach(data.remove);
|
||||
|
@ -37,7 +37,7 @@ abstract class QueryValues {
|
|||
return b.toString();
|
||||
}
|
||||
|
||||
String compileForUpdate(Query query) {
|
||||
String? compileForUpdate(Query query) {
|
||||
var data = toMap();
|
||||
if (data.isEmpty) return null;
|
||||
var b = StringBuffer('SET');
|
||||
|
|
|
@ -2,25 +2,25 @@ import 'builder.dart';
|
|||
|
||||
/// Builds a SQL `WHERE` clause.
|
||||
abstract class QueryWhere {
|
||||
final Set<QueryWhere> _and = Set();
|
||||
final Set<QueryWhere> _not = Set();
|
||||
final Set<QueryWhere> _or = Set();
|
||||
final Set<QueryWhere?> _and = Set();
|
||||
final Set<QueryWhere?> _not = Set();
|
||||
final Set<QueryWhere?> _or = Set();
|
||||
|
||||
Iterable<SqlExpressionBuilder> get expressionBuilders;
|
||||
|
||||
void and(QueryWhere other) {
|
||||
void and(QueryWhere? other) {
|
||||
_and.add(other);
|
||||
}
|
||||
|
||||
void not(QueryWhere other) {
|
||||
void not(QueryWhere? other) {
|
||||
_not.add(other);
|
||||
}
|
||||
|
||||
void or(QueryWhere other) {
|
||||
void or(QueryWhere? other) {
|
||||
_or.add(other);
|
||||
}
|
||||
|
||||
String compile({String tableName}) {
|
||||
String compile({String? tableName}) {
|
||||
var b = StringBuffer();
|
||||
int i = 0;
|
||||
|
||||
|
@ -40,17 +40,17 @@ abstract class QueryWhere {
|
|||
}
|
||||
|
||||
for (var other in _and) {
|
||||
var sql = other.compile();
|
||||
var sql = other!.compile();
|
||||
if (sql.isNotEmpty) b.write(' AND ($sql)');
|
||||
}
|
||||
|
||||
for (var other in _not) {
|
||||
var sql = other.compile();
|
||||
var sql = other!.compile();
|
||||
if (sql.isNotEmpty) b.write(' NOT ($sql)');
|
||||
}
|
||||
|
||||
for (var other in _or) {
|
||||
var sql = other.compile();
|
||||
var sql = other!.compile();
|
||||
if (sql.isNotEmpty) b.write(' OR ($sql)');
|
||||
}
|
||||
|
||||
|
|
|
@ -9,11 +9,11 @@ abstract class RelationshipType {
|
|||
|
||||
class Relationship {
|
||||
final int type;
|
||||
final String localKey;
|
||||
final String foreignKey;
|
||||
final String foreignTable;
|
||||
final bool cascadeOnDelete;
|
||||
final JoinType joinType;
|
||||
final String? localKey;
|
||||
final String? foreignKey;
|
||||
final String? foreignTable;
|
||||
final bool? cascadeOnDelete;
|
||||
final JoinType? joinType;
|
||||
|
||||
const Relationship(this.type,
|
||||
{this.localKey,
|
||||
|
@ -25,11 +25,11 @@ class Relationship {
|
|||
|
||||
class HasMany extends Relationship {
|
||||
const HasMany(
|
||||
{String localKey,
|
||||
String foreignKey,
|
||||
String foreignTable,
|
||||
{String? localKey,
|
||||
String? foreignKey,
|
||||
String? foreignTable,
|
||||
bool cascadeOnDelete = false,
|
||||
JoinType joinType})
|
||||
JoinType? joinType})
|
||||
: super(RelationshipType.hasMany,
|
||||
localKey: localKey,
|
||||
foreignKey: foreignKey,
|
||||
|
@ -42,11 +42,11 @@ const HasMany hasMany = HasMany();
|
|||
|
||||
class HasOne extends Relationship {
|
||||
const HasOne(
|
||||
{String localKey,
|
||||
String foreignKey,
|
||||
String foreignTable,
|
||||
{String? localKey,
|
||||
String? foreignKey,
|
||||
String? foreignTable,
|
||||
bool cascadeOnDelete = false,
|
||||
JoinType joinType})
|
||||
JoinType? joinType})
|
||||
: super(RelationshipType.hasOne,
|
||||
localKey: localKey,
|
||||
foreignKey: foreignKey,
|
||||
|
@ -59,10 +59,10 @@ const HasOne hasOne = HasOne();
|
|||
|
||||
class BelongsTo extends Relationship {
|
||||
const BelongsTo(
|
||||
{String localKey,
|
||||
String foreignKey,
|
||||
String foreignTable,
|
||||
JoinType joinType})
|
||||
{String? localKey,
|
||||
String? foreignKey,
|
||||
String? foreignTable,
|
||||
JoinType? joinType})
|
||||
: super(RelationshipType.belongsTo,
|
||||
localKey: localKey,
|
||||
foreignKey: foreignKey,
|
||||
|
@ -76,11 +76,11 @@ class ManyToMany extends Relationship {
|
|||
final Type through;
|
||||
|
||||
const ManyToMany(this.through,
|
||||
{String localKey,
|
||||
String foreignKey,
|
||||
String foreignTable,
|
||||
{String? localKey,
|
||||
String? foreignKey,
|
||||
String? foreignTable,
|
||||
bool cascadeOnDelete = false,
|
||||
JoinType joinType})
|
||||
JoinType? joinType})
|
||||
: super(
|
||||
RelationshipType.hasMany, // Many-to-Many is actually just a hasMany
|
||||
localKey: localKey,
|
||||
|
|
|
@ -11,7 +11,7 @@ class Union<T> extends QueryBase<T> {
|
|||
@override
|
||||
final String tableName;
|
||||
|
||||
Union(this.left, this.right, {this.all = false, String tableName})
|
||||
Union(this.left, this.right, {this.all = false, String? tableName})
|
||||
: this.tableName = tableName ?? left.tableName {
|
||||
substitutionValues
|
||||
..addAll(left.substitutionValues)
|
||||
|
@ -27,7 +27,7 @@ class Union<T> extends QueryBase<T> {
|
|||
@override
|
||||
String compile(Set<String> trampoline,
|
||||
{bool includeTableName = false,
|
||||
String preamble,
|
||||
String? preamble,
|
||||
bool withFields = true}) {
|
||||
var selector = all == true ? 'UNION ALL' : 'UNION';
|
||||
var t1 = Set<String>.from(trampoline);
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
name: angel_orm
|
||||
version: 3.0.0
|
||||
version: 4.0.0
|
||||
description: Runtime support for Angel's ORM. Includes base classes for queries.
|
||||
author: Tobe O <thosakwe@gmail.com>
|
||||
homepage: https://github.com/angel-dart/orm
|
||||
environment:
|
||||
sdk: '>=2.10.0 <3.0.0'
|
||||
sdk: '>=2.12.0 <3.0.0'
|
||||
dependencies:
|
||||
charcode: ^1.2.0
|
||||
intl: ^0.17.0
|
||||
|
@ -14,18 +13,18 @@ dev_dependencies:
|
|||
angel_model:
|
||||
git:
|
||||
url: https://github.com/dukefirehawk/angel.git
|
||||
ref: sdk-2.12.x
|
||||
ref: sdk-2.12.x_nnbd
|
||||
path: packages/model
|
||||
angel_serialize:
|
||||
git:
|
||||
url: https://github.com/dukefirehawk/angel.git
|
||||
ref: sdk-2.12.x
|
||||
ref: sdk-2.12.x_nnbd
|
||||
path: packages/serialize/angel_serialize
|
||||
angel_serialize_generator:
|
||||
git:
|
||||
url: https://github.com/dukefirehawk/angel.git
|
||||
ref: sdk-2.12.x
|
||||
ref: sdk-2.12.x_nnbd
|
||||
path: packages/serialize/angel_serialize_generator
|
||||
build_runner: ^1.11.5
|
||||
build_runner: ^2.0.1
|
||||
pedantic: ^1.11.0
|
||||
test: ^1.16.5
|
||||
test: ^1.17.3
|
||||
|
|
2
packages/orm/angel_orm_generator/AUTHORS.md
Normal file
2
packages/orm/angel_orm_generator/AUTHORS.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
Tobe O <thosakwe@gmail.com>
|
||||
Thomas Hii <thomashii@dukefirehawk.com>
|
|
@ -1,3 +1,9 @@
|
|||
# 4.0.0
|
||||
* Migrated to support Dart SDK 2.12.x NNBD
|
||||
|
||||
# 3.0.0
|
||||
* Migrated to work with Dart SDK 2.12.x Non NNBD
|
||||
|
||||
# 2.1.0-beta.2
|
||||
* Support for custom SQL expressions.
|
||||
|
||||
|
|
2
packages/orm/angel_orm_mysql/AUTHORS.md
Normal file
2
packages/orm/angel_orm_mysql/AUTHORS.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
Tobe O <thosakwe@gmail.com>
|
||||
Thomas Hii <thomashii@dukefirehawk.com>
|
8
packages/orm/angel_orm_mysql/CHANGELOG.md
Normal file
8
packages/orm/angel_orm_mysql/CHANGELOG.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
# 3.0.0
|
||||
* Migrated to support Dart SDK 2.12.x NNBD
|
||||
|
||||
# 2.0.0
|
||||
* Migrated to work with Dart SDK 2.12.x Non NNBD
|
||||
|
||||
# 1.0.0
|
||||
* First version.
|
2
packages/orm/angel_orm_postgres/AUTHORS.md
Normal file
2
packages/orm/angel_orm_postgres/AUTHORS.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
Tobe O <thosakwe@gmail.com>
|
||||
Thomas Hii <thomashii@dukefirehawk.com>
|
|
@ -1,3 +1,9 @@
|
|||
# 3.0.0
|
||||
* Migrated to support Dart SDK 2.12.x NNBD
|
||||
|
||||
# 2.0.0
|
||||
* Migrated to work with Dart SDK 2.12.x Non NNBD
|
||||
|
||||
# 1.1.0-beta.1
|
||||
* Improvements in how transactions are handled; rethrow failed exceptions after rolling back.
|
||||
* Remove deprecated executor classes.
|
||||
|
|
2
packages/orm/angel_orm_test/AUTHORS.md
Normal file
2
packages/orm/angel_orm_test/AUTHORS.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
Tobe O <thosakwe@gmail.com>
|
||||
Thomas Hii <thomashii@dukefirehawk.com>
|
8
packages/orm/angel_orm_test/CHANGELOG.md
Normal file
8
packages/orm/angel_orm_test/CHANGELOG.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
# 3.0.0
|
||||
* Migrated to support Dart SDK 2.12.x NNBD
|
||||
|
||||
# 2.0.0
|
||||
* Migrated to work with Dart SDK 2.12.x Non NNBD
|
||||
|
||||
# 1.0.0
|
||||
* First version.
|
Loading…
Reference in a new issue