Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
4bb3369
Update version numbers to 0.8.0
zackkrida Dec 9, 2025
5413b26
code/media -> code/.media
Anish9901 Dec 9, 2025
e7c02e1
Release notes initial copy
zackkrida Dec 10, 2025
0c7d1b5
Merge pull request #5091 from mathesar-foundation/fix_media_vol_path
zackkrida Dec 11, 2025
82e3b46
Add NOT logical operator to filters
pavish Dec 15, 2025
bb1024c
Improve style of horizontal connecting line
pavish Dec 15, 2025
0f3ad4d
Add sql tests for build_expr with the NOT logical operator
pavish Dec 15, 2025
7e9e86b
Do not display prefix for NOT
pavish Dec 15, 2025
96bf782
Reset the operator in the root filter-group to 'and' when all filters…
pavish Dec 15, 2025
8e41b73
Joined data copy changes
zackkrida Dec 16, 2025
3fea3b2
Merge pull request #5118 from mathesar-foundation/joined-data-copy-ch…
zackkrida Dec 16, 2025
b5b1514
Merge pull request #5111 from mathesar-foundation/negation-filters
mathemancer Dec 16, 2025
510841b
Remove Collapsible from join config modal
zackkrida Dec 16, 2025
36fcf8f
Switch column inspector pane joined table from warning to info box
zackkrida Dec 16, 2025
384f4db
Use the table color for the link icon in the joined column header
zackkrida Dec 16, 2025
70e5a5b
Improve joined data tooltip and config box to make relationships clearer
zackkrida Dec 16, 2025
5fe34bd
Make joined col bg colors more prominent
zackkrida Dec 16, 2025
09565fb
Add max height to multi-tagger results
zackkrida Dec 16, 2025
c77b9e5
Linting and formatting fixes
zackkrida Dec 16, 2025
adea154
Merge branch 'release-0.8.0' into 0.8.0-release-notes
zackkrida Dec 16, 2025
a60bff7
Add additional PRs
zackkrida Dec 16, 2025
f39c8d1
restore files mangled by reverting merge
mathemancer Dec 17, 2025
3bac8a0
Merge pull request #5124 from mathesar-foundation/fix_merge_reversion
pavish Dec 17, 2025
650dd0f
Merge branch 'release-0.8.0' into 0.8.0-release-notes
zackkrida Dec 17, 2025
48bc003
Adjust colors to use record-fk color
zackkrida Dec 17, 2025
2e89edd
Rename to "extend", add padding, and tweak tooltip text
zackkrida Dec 17, 2025
7ecaebb
Remove redundant comments
zackkrida Dec 17, 2025
d92c275
Merge pull request #5120 from mathesar-foundation/joined-data-ux-changes
seancolsen Dec 18, 2025
1c3d94d
Merge branch 'release-0.8.0' into 0.8.0-release-notes
zackkrida Dec 18, 2025
9b28604
Add images and tweak copy
zackkrida Dec 19, 2025
0186521
Update release notes part 1
kgodey Dec 19, 2025
7a60ad7
Release notes part 2
kgodey Dec 19, 2025
2eca20c
update to filtering description.
kgodey Dec 19, 2025
f0d3778
Translate dict.json in ja
transifex-integration[bot] Dec 19, 2025
e9c9275
Merge pull request #5141 from mathesar-foundation/release-0.8.0-trans…
zackkrida Dec 19, 2025
f79bb17
Merge pull request #5127 from mathesar-foundation/0.8.0-release-notes
zackkrida Dec 19, 2025
03cc07f
Merge pull request #5086 from mathesar-foundation/release-0.8.0
zackkrida Dec 20, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Caddyfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

file_server {
precompressed br zstd gzip
root {$MEDIA_ROOT:/code/media/}
root {$MEDIA_ROOT:/code/.media/}
}
}
handle_path /static/* {
Expand Down
20 changes: 14 additions & 6 deletions db/sql/05_msar.sql
Original file line number Diff line number Diff line change
Expand Up @@ -390,22 +390,22 @@ CREATE OR REPLACE FUNCTION
msar.get_column_name(rel_id oid, col_id integer) RETURNS text AS $$/*
Return the UNQUOTED name for a given column in a given relation (e.g., table).

More precisely, this function returns the name of attributes of any relation appearing in the
More precisely, this function returns the name of attributes that are not dropped, for any relation appearing in the
pg_class catalog table (so you could find attributes of indices with this function).

Args:
rel_id: The OID of the relation.
col_id: The attnum of the column in the relation.
*/
SELECT attname::text FROM pg_attribute WHERE attrelid=rel_id AND attnum=col_id;
SELECT attname::text FROM pg_attribute WHERE attrelid=rel_id AND attnum=col_id AND NOT attisdropped;
$$ LANGUAGE sql RETURNS NULL ON NULL INPUT;


CREATE OR REPLACE FUNCTION
msar.get_column_name(rel_id oid, col_name text) RETURNS text AS $$/*
Return the UNQUOTED name for a given column in a given relation (e.g., table).

More precisely, this function returns the unquoted name of attributes of any relation appearing in the
More precisely, this function returns the unquoted name of attributes that are not dropped, for any relation appearing in the
pg_class catalog table (so you could find attributes of indices with this function). If the given
col_name is not in the relation, we return null.

Expand All @@ -416,7 +416,7 @@ Args:
rel_id: The OID of the relation.
col_name: The unquoted name of the column in the relation.
*/
SELECT attname::text FROM pg_attribute WHERE attrelid=rel_id AND attname=col_name;
SELECT attname::text FROM pg_attribute WHERE attrelid=rel_id AND attname=col_name AND NOT attisdropped;
$$ LANGUAGE sql RETURNS NULL ON NULL INPUT;


Expand Down Expand Up @@ -3829,6 +3829,8 @@ CREATE OR REPLACE FUNCTION
msar.alter_columns(tab_id oid, col_alters jsonb) RETURNS integer[] AS $$/*
Alter columns of the given table in bulk, returning the IDs of the columns so altered.

Exception is raised when mathesar ID column is tried to be renamed.

Args:
tab_id: The OID of the table whose columns we'll alter.
col_alters: a JSONB describing the alterations to make.
Expand Down Expand Up @@ -3875,8 +3877,13 @@ BEGIN
FROM jsonb_array_elements(col_alters) AS x(col_alter_obj)
INNER JOIN pg_catalog.pg_attribute AS pga ON pga.attnum=(x.col_alter_obj ->> 'attnum')::smallint AND pga.attrelid=tab_id
LEFT JOIN pg_catalog.pg_attrdef AS pgat ON pgat.adnum=(x.col_alter_obj ->> 'attnum')::smallint AND pgat.adrelid=tab_id
WHERE NOT msar.is_mathesar_id_column(tab_id, (x.col_alter_obj ->> 'attnum')::integer)
LOOP
IF col.new_name IS NOT NULL AND msar.is_mathesar_id_column(tab_id, col.attnum) THEN
RAISE EXCEPTION USING
MESSAGE = 'Mathesar ID column cannot be renamed',
ERRCODE = 'check_violation';
END IF;

PERFORM msar.set_not_null(tab_id, col.attnum, col.not_null);
PERFORM msar.rename_column(tab_id, col.attnum, col.new_name);

Expand Down Expand Up @@ -4474,9 +4481,10 @@ $$ LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE;

CREATE TABLE msar.expr_templates (expr_key text PRIMARY KEY, expr_template text);
INSERT INTO msar.expr_templates VALUES
-- basic composition operators
-- basic logical operators
('and', '(%s) AND (%s)'),
('or', '(%s) OR (%s)'),
('not', 'NOT (%s)'),
-- general comparison operators
('equal', '(%s) = (%s)'),
('lesser', '(%s) < (%s)'),
Expand Down
83 changes: 82 additions & 1 deletion db/sql/test_sql_functions.sql
Original file line number Diff line number Diff line change
Expand Up @@ -1997,7 +1997,6 @@ BEGIN
END;
$$ LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION test_alter_columns_single_name() RETURNS SETOF TEXT AS $f$
DECLARE
col_alters_jsonb jsonb := '[{"attnum": 2, "name": "blah"}]';
Expand All @@ -2013,6 +2012,25 @@ END;
$f$ LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION test_alter_mathesar_id_column_name()
RETURNS SETOF TEXT AS $f$
DECLARE
tab_oid oid;
col_alters_jsonb jsonb := '[{"attnum": 1, "name": "new_id"}]';
BEGIN
PERFORM __setup_column_alter();
tab_oid := 'test_schema.col_alters'::regclass::oid;

BEGIN
PERFORM msar.alter_columns(tab_oid, col_alters_jsonb);
EXCEPTION
WHEN OTHERS THEN
RETURN NEXT pass('Exception was correctly raised when renaming Mathesar ID column.');
END;
END;
$f$ LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION test_alter_columns_multi_names() RETURNS SETOF TEXT AS $f$
DECLARE
col_alters_jsonb jsonb := $j$[
Expand Down Expand Up @@ -5045,6 +5063,45 @@ BEGIN
),
'(((atable.col2) = (''500'')) AND ((atable.col3) < (''abcde''))) OR ((atable.id) > (''20''))'
);
RETURN NEXT is(
msar.build_expr(
rel_id,
jsonb_build_object(
'type', 'not', 'args', jsonb_build_array(
jsonb_build_object(
'type', 'equal', 'args', jsonb_build_array(
jsonb_build_object('type', 'attnum', 'value', 2),
jsonb_build_object('type', 'literal', 'value', 500))
)
)
)
),
'NOT ((atable.col1) = (''500''))'
);
RETURN NEXT is(
msar.build_expr(
rel_id,
jsonb_build_object(
'type', 'not', 'args', jsonb_build_array(
jsonb_build_object(
'type', 'or', 'args', jsonb_build_array(
jsonb_build_object(
'type', 'equal', 'args', jsonb_build_array(
jsonb_build_object('type', 'attnum', 'value', 2),
jsonb_build_object('type', 'literal', 'value', 500))
),
jsonb_build_object(
'type', 'lesser', 'args', jsonb_build_array(
jsonb_build_object('type', 'attnum', 'value', 3),
jsonb_build_object('type', 'literal', 'value', 100))
)
)
)
)
)
),
'NOT (((atable.col1) = (''500'')) OR ((atable.col2) < (''100'')))'
);
END;
$$ LANGUAGE plpgsql;

Expand Down Expand Up @@ -6093,6 +6150,30 @@ END;
$$ LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION test_record_summary_after_dropped_referenced_column()
RETURNS SETOF TEXT AS $$
BEGIN
PERFORM __setup_preview_fkey_cols();

ALTER TABLE "Counselors" DROP COLUMN "Name";
RETURN NEXT is(
msar.get_record_from_table(
tab_id => '"Students"'::regclass::oid,
rec_id => 4,
return_record_summaries => true,
table_record_summary_templates => jsonb_build_object(
'"Students"'::regclass::oid,
'[[4], " ", [5], "% - (", [3, 3], " / ", [3, 2, 2], ")"]'::jsonb
)
) -> 'record_summaries' ->> '4',
'Ida Idalia 90% - (Carol Carlson / )',
'record summary executes fine after dropping referenced FK column "Counselors"."Name"'
);

END;
$$ LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION test_add_record_to_table_with_preview() RETURNS SETOF TEXT AS $$
BEGIN
PERFORM __setup_preview_fkey_cols();
Expand Down
4 changes: 2 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ services:

volumes:
- ./msar/static:/code/static
- ./msar/media:/code/media
- ./msar/media:/code/.media
- ./msar/secrets:/code/.secrets
# Uncomment the following to mount file_storage.yml and enable
# an S3-compliant file storage backend
Expand Down Expand Up @@ -257,6 +257,6 @@ services:
- "80:80"
- "443:443"
volumes:
- ./msar/media:/code/media
- ./msar/media:/code/.media
- ./msar/static:/code/static
- ./msar/caddy:/data
2 changes: 1 addition & 1 deletion docs/docs/administration/file-backend-config.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ You'll either create a file named `file_storage.yml` or set up the `FILE_STORAGE
```diff
volumes:
- ./msar/static:/code/static
- ./msar/media:/code/media
- ./msar/media:/code/.media
# Uncomment the following to mount file_storage.yml and enable
# an S3-compliant file storage backend
-# - ./file_storage.yml:/code/file_storage.yml
Expand Down
2 changes: 1 addition & 1 deletion docs/docs/administration/single-sign-on.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ You'll either create a file named `sso.yml` or set up the `OIDC_CONFIG_DICT` env
```diff
volumes:
- ./msar/static:/code/static
- ./msar/media:/code/media
- ./msar/media:/code/.media
# Uncomment the following to mount sso.yml and enable Single Sign-On (SSO).
-# - ./sso.yml:/code/sso.yml
+ - ./sso.yml:/code/sso.yml
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/docs/assets/releases/0.8.0/example-view.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading