Repository navigation
Conversation
A view can now exist without a table and carries a type (table or grid), so an application can hold pages that are not tied to one table. - tables_views gets a type column and table_id becomes nullable - a view without a table is owned by its creator and listed for them - row, column, import, relation, permission and activity code skips views without a table instead of failing on the missing table - views without a table are removed with their owner Co-authored-by: Ruben van der Linde <ruben@conduction.nl> Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Remko <remko@conduction.nl>
rjzondervan
reviewed
Oct 12, 2026
remko48
added this pull request to stack #15
October 12, 2026 08:26
rjzondervan
reviewed
Oct 12, 2026
rjzondervan
reviewed
Oct 12, 2026
rjzondervan
reviewed
Oct 12, 2026
rjzondervan
reviewed
Oct 12, 2026
Federated views have no table_id either, so a missing table alone does not mean a view is standalone. View::isStandalone() checks for no table and no external id, and the guards, the owner fallback and the query for a user's standalone views now use it. - a row update, delete or presence check against a view without a table no longer ends in a TypeError: the view holds no rows - the view type is validated with the rest of the input and is typed as table or grid in the API - the migration no longer makes table_id nullable, it already is Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Remko <remko@conduction.nl>
3 of 5 tasks
The unique index on (table_id, technical_name) does not hold for a missing table on MySQL, PostgreSQL and SQLite, and on Oracle it makes a name unique across the whole instance. A view without a table is therefore always named view_<id>: create and update refuse a chosen name, and an import ignores the name from its source. The page a user names is the application's menu item, whose technical name is unique within the application. Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Remko <remko@conduction.nl>
This was referenced Oct 12, 2026
3 of 5 tasks
remko48
force-pushed
the
stack/g1-views-without-table
branch
2 times, most recently
from
October 12, 2026 13:20
5b9b7e3 to
2ebf8c7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Views can now exist without a table.
With this PR we prepare for the use of pages inside an application.
Views also get a
type(tableorgrid).Every existing view becomes
table, so nothing changes for current users.What changes
tables_viewsgets atypecolumn with the defaulttable.table_idwas already nullable (for federated views), so a view without a table needs no other schema change.ViewService::create()accepts no table when the type is nottable. Atableview still needs a table, and a view without a table cannot be changed totablelater.view_<id>). Setting a technical name on it is rejected, and an import drops it. The unique index on(table_id, technical_name)treats a missing table differently per database.tableIdis now nullable andtypeis added to the view response (OpenAPI and TS types regenerated).typecan already be changed through the existing view update endpoints. There is no new endpoint yet; creating a view without a table through the API comes in a later PR of this stack.🖼️ Screenshots
Backend only, no UI changes.
🏁 Checklist
/backport to stableX.X🤖 AI (if applicable)