Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
7 changes: 7 additions & 0 deletions cmd/dump/dump_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,13 @@ func TestDumpCommand_Issue125FunctionDefault(t *testing.T) {
runExactMatchTest(t, "issue_125_function_default")
}

func TestDumpCommand_Issue133IndexSort(t *testing.T) {
if testing.Short() {
t.Skip("Skipping integration test in short mode")
}
runExactMatchTest(t, "issue_133_index_sort")
}

func runExactMatchTest(t *testing.T, testDataDir string) {
runExactMatchTestWithContext(t, context.Background(), testDataDir)
}
Expand Down
10 changes: 10 additions & 0 deletions testdata/dump/issue_133_index_sort/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "issue_133_index_sort",
"description": "Test case for index sorting in alphabetical order (GitHub issue #133)",
"source": "https://github.com/pgschema/pgschema/issues/133",
"notes": [
"Tests that indexes are dumped in alphabetical order for consistent, predictable output",
"Indexes are created in non-alphabetical order: email, created_at, status, department, last_name",
"Expected dump order is alphabetical: created_at, department, email, last_name, status"
]
}
84 changes: 84 additions & 0 deletions testdata/dump/issue_133_index_sort/pgdump.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
--
-- PostgreSQL database dump
--

-- Dumped from database version 17.5 (Debian 17.5-1.pgdg120+1)
-- Dumped by pg_dump version 17.6 (Homebrew)

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET transaction_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;

SET default_tablespace = '';

SET default_table_access_method = heap;

--
-- Name: users; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public.users (
id bigint NOT NULL,
email character varying(255) NOT NULL,
last_name character varying(100),
department character varying(50),
status character varying(20),
created_at timestamp with time zone DEFAULT now()
);


--
-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--

ALTER TABLE ONLY public.users
ADD CONSTRAINT users_pkey PRIMARY KEY (id);


--
-- Name: idx_users_created_at; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX idx_users_created_at ON public.users USING btree (created_at);


--
-- Name: idx_users_department; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX idx_users_department ON public.users USING btree (department);


--
-- Name: idx_users_email; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX idx_users_email ON public.users USING btree (email);


--
-- Name: idx_users_last_name; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX idx_users_last_name ON public.users USING btree (last_name);


--
-- Name: idx_users_status; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX idx_users_status ON public.users USING btree (status);


--
-- PostgreSQL database dump complete
--

52 changes: 52 additions & 0 deletions testdata/dump/issue_133_index_sort/pgschema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
--
-- pgschema database dump
--

-- Dumped from database version PostgreSQL 17.5
-- Dumped by pgschema version 1.4.0


--
-- Name: users; Type: TABLE; Schema: -; Owner: -
--

CREATE TABLE IF NOT EXISTS users (
id bigint,
email varchar(255) NOT NULL,
last_name varchar(100),
department varchar(50),
status varchar(20),
created_at timestamptz DEFAULT now(),
CONSTRAINT users_pkey PRIMARY KEY (id)
);

--
-- Name: idx_users_created_at; Type: INDEX; Schema: -; Owner: -
--

CREATE INDEX IF NOT EXISTS idx_users_created_at ON users (created_at);

--
-- Name: idx_users_department; Type: INDEX; Schema: -; Owner: -
--

CREATE INDEX IF NOT EXISTS idx_users_department ON users (department);

--
-- Name: idx_users_email; Type: INDEX; Schema: -; Owner: -
--

CREATE INDEX IF NOT EXISTS idx_users_email ON users (email);

--
-- Name: idx_users_last_name; Type: INDEX; Schema: -; Owner: -
--

CREATE INDEX IF NOT EXISTS idx_users_last_name ON users (last_name);

--
-- Name: idx_users_status; Type: INDEX; Schema: -; Owner: -
--

CREATE INDEX IF NOT EXISTS idx_users_status ON users (status);

33 changes: 33 additions & 0 deletions testdata/dump/issue_133_index_sort/raw.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
--
-- Test case for GitHub issue #133: Index sorting
--
-- This test case validates that indexes are dumped in alphabetical order
-- rather than in an arbitrary order.
--
-- The indexes are intentionally created in non-alphabetical order:
-- idx_users_email, idx_users_created_at, idx_users_status,
-- idx_users_department, idx_users_last_name
--
-- Expected alphabetical order in dump output:
-- idx_users_created_at, idx_users_department, idx_users_email,
-- idx_users_last_name, idx_users_status
--

CREATE TABLE users (
id bigint NOT NULL,
email varchar(255) NOT NULL,
last_name varchar(100),
department varchar(50),
status varchar(20),
created_at timestamp with time zone DEFAULT now()
);

-- Create indexes in non-alphabetical order to test sorting
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_created_at ON users(created_at);
CREATE INDEX idx_users_status ON users(status);
CREATE INDEX idx_users_department ON users(department);
CREATE INDEX idx_users_last_name ON users(last_name);

-- Add primary key
ALTER TABLE users ADD CONSTRAINT users_pkey PRIMARY KEY (id);