simple-sql 0.5.8 → 0.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8db783548f20bfc4902ecdc7e94c79f8ae8eceeb99c46c4f65dd9b9d55b6c6ea
4
- data.tar.gz: 357f8228c7b215b5e17eddb9b8bc935ce0e82c54ccac910876df0c428a4759cd
3
+ metadata.gz: 913129df1de6aab1bd350652782ea671e56f6a396dd8c6a2e7a8cebc972fab0e
4
+ data.tar.gz: 6aca39154c90cdfa0cb089c3358afa0f3c28ab261c837c99536c1fa39c3569f9
5
5
  SHA512:
6
- metadata.gz: a096a8c2837b8e4d0066e99f637751dcdf08cb649465f6eef051cb5955475211199a07ca0f7e6e8792f7c1ca104655883038d6f682ded67dfc408898ebd4aec7
7
- data.tar.gz: 188763bbe50ccc364f8a159b56f9c173024e46db5ad314fba0878fcb7dbbb758602c0551d484be9fa3e1e15f7d3036cd211cec048e1cd23489549aa9c3d8fe7c
6
+ metadata.gz: '019f7c7b5c0b9364858b0af3a4cbf4ccffc69ae961610cbe5b552d4d646a2df0870c0e20d990dd77a36821a2c6395d05687464093b030cef7bbdc7115c9af3bb'
7
+ data.tar.gz: 4cf3ec7ff055cb174ca25043c46f714086483e73908d30daf723df062ed809c747500251555823eba676d6e4c747bdb80a2cb34c303e1ed904d4ef752e4f619d
data/.gitignore CHANGED
@@ -7,3 +7,4 @@ Gemfile.lock
7
7
  .rake_t_cache
8
8
  .rspec.status
9
9
  .DS_Store
10
+ tmp
data/Rakefile CHANGED
@@ -1,5 +1,18 @@
1
1
  Dir.glob("tasks/*.rake").each { |r| import r }
2
2
 
3
+ task "test:generate_fixtures" do
4
+ FileUtils.mkdir_p "tmp"
5
+ FileUtils.mkdir_p "spec/fixtures"
6
+
7
+ Dir.chdir "tmp" do
8
+ sh "curl -L -O https://raw.githubusercontent.com/comperiosearch/booktownDemo/master/booktown.sql"
9
+ end
10
+
11
+ sh "dropdb booktown || true"
12
+ sh "psql -f tmp/booktown.sql"
13
+ sh "psql booktown -c 'alter schema public rename to booktown'"
14
+ sh "pg_dump --no-owner booktown > spec/fixtures/booktown.sql"
15
+ end
3
16
 
4
17
  task "test:prepare_db" do
5
18
  sh "createdb simple-sql-test 2>&1 > /dev/null || true"
data/bin/db_restore ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ require 'yaml'
3
+
4
+ env = ENV["POSTJOB_ENV"] || ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"
5
+
6
+ configs = YAML.load_file "config/database.yml"
7
+ config = configs.fetch(env) { configs.fetch("defaults") }
8
+
9
+ ENV["PGHOST"] = config["host"]
10
+ ENV["PGPORT"] = config["port"] && config["port"].to_s
11
+ ENV["PGUSER"] = config["username"]
12
+ ENV["PGPASSWORD"] = config["password"]
13
+
14
+ system "pg_restore", "-d", config.fetch("database"), *ARGV
data/bin/pg CHANGED
@@ -11,4 +11,4 @@ ENV["PGPORT"] = config["port"] && config["port"].to_s
11
11
  ENV["PGUSER"] = config["username"]
12
12
  ENV["PGPASSWORD"] = config["password"]
13
13
 
14
- system "psql", "-d", config.fetch("database")
14
+ system "psql", "-d", config.fetch("database"), *ARGV
data/lib/simple/sql.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # rubocop:disable Naming/UncommunicativeMethodParamName
2
+
1
3
  require "forwardable"
2
4
  require "logger"
3
5
  require "expectation"
@@ -16,7 +18,7 @@ module Simple
16
18
  extend self
17
19
 
18
20
  extend Forwardable
19
- delegate [:ask, :all, :each, :exec, :locked, :print, :transaction, :wait_for_notify, :costs] => :default_connection
21
+ delegate [:ask, :all, :each, :exec, :locked, :print, :transaction, :wait_for_notify, :estimate_cost] => :default_connection
20
22
  delegate [:reflection] => :default_connection
21
23
  delegate [:duplicate] => :default_connection
22
24
  delegate [:insert] => :default_connection
@@ -24,6 +26,14 @@ module Simple
24
26
 
25
27
  delegate [:logger, :logger=] => ::Simple::SQL::Logging
26
28
 
29
+ def escape_string(s)
30
+ expect! s => [Symbol, String, nil]
31
+
32
+ return "NULL" unless s
33
+
34
+ "'#{PG::Connection.escape_string(s)}'"
35
+ end
36
+
27
37
  # connects to the database specified via the url parameter. If called
28
38
  # without argument it tries to determine a DATABASE_URL from either the
29
39
  # environment setting (DATABASE_URL) or from a config/database.yml file,
@@ -86,13 +86,9 @@ class Simple::SQL::Connection
86
86
  end
87
87
 
88
88
  # returns an Array [min_cost, max_cost] based on the database's estimation
89
- def costs(sql, *args)
90
- explanation_first = ask "EXPLAIN #{sql}", *args
91
- unless explanation_first =~ /cost=(\d+(\.\d+))\.+(\d+(\.\d+))/
92
- raise "Cannot determine cost"
93
- end
94
-
95
- [Float($1), Float($3)]
89
+ def estimate_cost(sql, *args)
90
+ explanation = ask "EXPLAIN (FORMAT JSON) #{sql}", *args
91
+ explanation.first.dig "Plan", "Total Cost"
96
92
  end
97
93
 
98
94
  # Executes a block, usually of db insert code, while holding an
@@ -128,6 +124,8 @@ class Simple::SQL::Connection
128
124
  Logging.with_logged_query self, sql, *args do
129
125
  raw_connection.exec_params(sql, Encoder.encode_args(raw_connection, args))
130
126
  end
127
+ rescue PG::InvalidTextRepresentation
128
+ raise ArgumentError, $!.to_s
131
129
  end
132
130
 
133
131
  # returns an array of decoded entries, if any
@@ -1,3 +1,5 @@
1
+ # rubocop:disable Metrics/ClassLength
2
+
1
3
  class Simple::SQL::Connection
2
4
  def reset_reflection
3
5
  @reflection = nil
@@ -16,16 +18,39 @@ class Simple::SQL::Connection
16
18
  table_info(schema: schema).keys
17
19
  end
18
20
 
21
+ def primary_key_column(table_name)
22
+ @primary_key_column ||= {}
23
+ @primary_key_column[table_name] ||= begin
24
+ pk_column, other = primary_key_columns(table_name)
25
+
26
+ raise "#{table_name}: No support for combined primary keys" if other
27
+ raise "#{table_name}: No primary key" if pk_column.nil?
28
+
29
+ pk_column
30
+ end
31
+ end
32
+
19
33
  def primary_key_columns(table_name)
20
- @connection.all <<~SQL, table_name
34
+ @primary_key_columns ||= {}
35
+ @primary_key_columns[table_name] ||= _primary_key_columns(table_name)
36
+ end
37
+
38
+ private
39
+
40
+ def _primary_key_columns(table_name)
41
+ sql = <<~SQL
21
42
  SELECT pg_attribute.attname
22
43
  FROM pg_index
23
44
  JOIN pg_attribute ON pg_attribute.attrelid = pg_index.indrelid AND pg_attribute.attnum = ANY(pg_index.indkey)
24
45
  WHERE pg_index.indrelid = $1::regclass
25
46
  AND pg_index.indisprimary;
26
47
  SQL
48
+
49
+ @connection.all(sql, table_name)
27
50
  end
28
51
 
52
+ public
53
+
29
54
  TIMESTAMP_COLUMN_NAMES = %w(inserted_at created_at updated_at)
30
55
 
31
56
  # timestamp_columns are columns that will be set automatically after
@@ -11,7 +11,7 @@ class Simple::SQL::Connection::Scope
11
11
  # Returns the fast count of matching records
12
12
  #
13
13
  # For counts larger than EXACT_COUNT_THRESHOLD this returns an estimate
14
- def fast_count
14
+ def count_estimate
15
15
  estimate = estimated_count
16
16
  return estimate if estimate > EXACT_COUNT_THRESHOLD
17
17
 
@@ -19,17 +19,16 @@ class Simple::SQL::Connection::Scope
19
19
  @connection.ask("SELECT COUNT(*) FROM (#{sql}) _total_count", *args)
20
20
  end
21
21
 
22
+ # returns the query plan as a Hash.
23
+ def explain
24
+ sql = to_sql(pagination: false)
25
+ explanation = @connection.ask("EXPLAIN (FORMAT JSON) #{sql}", *args).first || {}
26
+ explanation["Plan"]
27
+ end
28
+
22
29
  private
23
30
 
24
31
  def estimated_count
25
- sql = order_by(nil).to_sql(pagination: false)
26
- lines = @connection.all("EXPLAIN #{sql}", *args)
27
- lines.each do |line|
28
- next unless line =~ /\brows=(\d+)/
29
-
30
- return Integer($1)
31
- end
32
-
33
- -1
32
+ order_by(nil).explain.fetch("Plan Rows", -1)
34
33
  end
35
34
  end
@@ -20,8 +20,8 @@ class Simple::SQL::Connection::Scope
20
20
  def enumerate_groups(sql_fragment)
21
21
  sql = order_by(nil).to_sql(pagination: false)
22
22
 
23
- _, max_cost = @connection.costs "SELECT MIN(#{sql_fragment}) FROM (#{sql}) sq", *args
24
- raise "enumerate_groups: takes too much time. Make sure to create a suitable index" if max_cost > 10_000
23
+ cost = @connection.estimate_cost "SELECT MIN(#{sql_fragment}) FROM (#{sql}) sq", *args
24
+ raise "enumerate_groups(#{sql_fragment.inspect}) takes too much time. Make sure to create a suitable index" if cost > 10_000
25
25
 
26
26
  groups = []
27
27
  var_name = "$#{@args.count + 1}"
@@ -42,12 +42,12 @@ class Simple::SQL::Connection::Scope
42
42
  Hash[recs]
43
43
  end
44
44
 
45
- def fast_count_by(sql_fragment)
45
+ def count_by_estimate(sql_fragment)
46
46
  sql = order_by(nil).to_sql(pagination: false)
47
47
 
48
- _, max_cost = @connection.costs "SELECT COUNT(*) FROM (#{sql}) sq GROUP BY #{sql_fragment}", *args
48
+ cost = @connection.estimate_cost "SELECT COUNT(*) FROM (#{sql}) sq GROUP BY #{sql_fragment}", *args
49
49
 
50
- return count_by(sql_fragment) if max_cost < 10_000
50
+ return count_by(sql_fragment) if cost < 10_000
51
51
 
52
52
  # iterate over all groups, estimating the count for each. If the count is
53
53
  # less than EXACT_COUNT_THRESHOLD we ask for the exact count in that and
@@ -58,7 +58,8 @@ class Simple::SQL::Connection::Scope
58
58
  sparse_groups = []
59
59
  enumerate_groups(sql_fragment).each do |group|
60
60
  scope = @connection.scope("SELECT * FROM (#{sql}) sq WHERE #{sql_fragment}=#{var_name}", *args, group)
61
- counts[group] = scope.send(:estimated_count)
61
+ estimated_count = scope.send(:estimated_count)
62
+ counts[group] = estimated_count
62
63
  sparse_groups << group if estimated_count < EXACT_COUNT_THRESHOLD
63
64
  end
64
65
 
@@ -38,15 +38,8 @@ class ::Simple::SQL::Result < Array
38
38
  # returns the (potentialy estimated) total count of results
39
39
  #
40
40
  # This is only available for paginated scopes
41
- def total_fast_count
42
- @total_fast_count ||= pagination_scope.fast_count
43
- end
44
-
45
- # returns the (potentialy estimated) total number of pages
46
- #
47
- # This is only available for paginated scopes
48
- def total_fast_pages
49
- @total_fast_pages ||= (total_fast_count * 1.0 / pagination_scope.per).ceil
41
+ def total_count_estimate
42
+ @total_count_estimate ||= pagination_scope.count_estimate
50
43
  end
51
44
 
52
45
  # returns the (potentialy slow) exact total count of results
@@ -56,13 +49,6 @@ class ::Simple::SQL::Result < Array
56
49
  @total_count ||= pagination_scope.count
57
50
  end
58
51
 
59
- # returns the (potentialy estimated) total number of pages
60
- #
61
- # This is only available for paginated scopes
62
- def total_pages
63
- @total_pages ||= (total_count * 1.0 / pagination_scope.per).ceil
64
- end
65
-
66
52
  # returns the current page number in a paginated search
67
53
  #
68
54
  # This is only available for paginated scopes
@@ -91,9 +77,7 @@ class ::Simple::SQL::Result < Array
91
77
  if scope.page <= 1 && empty?
92
78
  @current_page = 1
93
79
  @total_count = 0
94
- @total_pages = 1
95
- @total_fast_count = 0
96
- @total_fast_pages = 1
80
+ @total_count_estimate = 0
97
81
  end
98
82
  end
99
83
  end
@@ -11,7 +11,7 @@ class Simple::SQL::Connection::Scope
11
11
  # Returns the fast count of matching records
12
12
  #
13
13
  # For counts larger than EXACT_COUNT_THRESHOLD this returns an estimate
14
- def fast_count
14
+ def count_estimate
15
15
  estimate = estimated_count
16
16
  return estimate if estimate > EXACT_COUNT_THRESHOLD
17
17
 
@@ -1,5 +1,5 @@
1
1
  module Simple
2
2
  module SQL
3
- VERSION = "0.5.8"
3
+ VERSION = "0.5.9"
4
4
  end
5
5
  end
@@ -0,0 +1,1793 @@
1
+ --
2
+ -- PostgreSQL database dump
3
+ --
4
+
5
+ -- Dumped from database version 9.6.10
6
+ -- Dumped by pg_dump version 11.1
7
+
8
+ SET statement_timeout = 0;
9
+ SET lock_timeout = 0;
10
+ SET idle_in_transaction_session_timeout = 0;
11
+ SET client_encoding = 'UTF8';
12
+ SET standard_conforming_strings = on;
13
+ SELECT pg_catalog.set_config('search_path', '', false);
14
+ SET check_function_bodies = false;
15
+ SET client_min_messages = warning;
16
+ SET row_security = off;
17
+
18
+ --
19
+ -- Name: booktown; Type: SCHEMA; Schema: -; Owner: -
20
+ --
21
+
22
+ CREATE SCHEMA booktown;
23
+
24
+
25
+ --
26
+ -- Name: SCHEMA booktown; Type: COMMENT; Schema: -; Owner: -
27
+ --
28
+
29
+ COMMENT ON SCHEMA booktown IS 'standard public schema';
30
+
31
+
32
+ --
33
+ -- Name: add_shipment(integer, text); Type: FUNCTION; Schema: booktown; Owner: -
34
+ --
35
+
36
+ CREATE FUNCTION booktown.add_shipment(integer, text) RETURNS timestamp with time zone
37
+ LANGUAGE plpgsql
38
+ AS $_$
39
+ DECLARE
40
+ customer_id ALIAS FOR $1;
41
+ isbn ALIAS FOR $2;
42
+ shipment_id INTEGER;
43
+ right_now timestamp;
44
+ BEGIN
45
+ right_now := 'now';
46
+ SELECT INTO shipment_id id FROM shipments ORDER BY id DESC;
47
+ shipment_id := shipment_id + 1;
48
+ INSERT INTO shipments VALUES ( shipment_id, customer_id, isbn, right_now );
49
+ RETURN right_now;
50
+ END;
51
+ $_$;
52
+
53
+
54
+ --
55
+ -- Name: add_two_loop(integer, integer); Type: FUNCTION; Schema: booktown; Owner: -
56
+ --
57
+
58
+ CREATE FUNCTION booktown.add_two_loop(integer, integer) RETURNS integer
59
+ LANGUAGE plpgsql
60
+ AS $_$
61
+ DECLARE
62
+
63
+ -- Declare aliases for function arguments.
64
+
65
+ low_number ALIAS FOR $1;
66
+ high_number ALIAS FOR $2;
67
+
68
+ -- Declare a variable to hold the result.
69
+
70
+ result INTEGER = 0;
71
+
72
+ BEGIN
73
+
74
+ WHILE result != high_number LOOP
75
+ result := result + 1;
76
+ END LOOP;
77
+
78
+ RETURN result;
79
+ END;
80
+ $_$;
81
+
82
+
83
+ --
84
+ -- Name: audit_test(); Type: FUNCTION; Schema: booktown; Owner: -
85
+ --
86
+
87
+ CREATE FUNCTION booktown.audit_test() RETURNS opaque
88
+ LANGUAGE plpgsql
89
+ AS $$
90
+ BEGIN
91
+
92
+ IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
93
+
94
+ NEW.user_aud := current_user;
95
+ NEW.mod_time := 'NOW';
96
+
97
+ INSERT INTO inventory_audit SELECT * FROM inventory WHERE prod_id=NEW.prod_id;
98
+
99
+ RETURN NEW;
100
+
101
+ ELSE if TG_OP = 'DELETE' THEN
102
+ INSERT INTO inventory_audit SELECT *, current_user, 'NOW' FROM inventory WHERE prod_id=OLD.prod_id;
103
+
104
+ RETURN OLD;
105
+ END IF;
106
+ END IF;
107
+ END;
108
+ $$;
109
+
110
+
111
+ --
112
+ -- Name: books_by_subject(text); Type: FUNCTION; Schema: booktown; Owner: -
113
+ --
114
+
115
+ CREATE FUNCTION booktown.books_by_subject(text) RETURNS text
116
+ LANGUAGE plpgsql
117
+ AS $_$
118
+ DECLARE
119
+ sub_title ALIAS FOR $1;
120
+ sub_id INTEGER;
121
+ found_text TEXT :='';
122
+ BEGIN
123
+ SELECT INTO sub_id id FROM subjects WHERE subject = sub_title;
124
+ RAISE NOTICE 'sub_id = %',sub_id;
125
+ IF sub_title = 'all' THEN
126
+ found_text := extract_all_titles();
127
+ RETURN found_text;
128
+ ELSE IF sub_id >= 0 THEN
129
+ found_text := extract_title(sub_id);
130
+ RETURN '
131
+ ' || sub_title || ':
132
+ ' || found_text;
133
+ END IF;
134
+ END IF;
135
+ RETURN 'Subject not found.';
136
+ END;
137
+ $_$;
138
+
139
+
140
+ --
141
+ -- Name: check_book_addition(); Type: FUNCTION; Schema: booktown; Owner: -
142
+ --
143
+
144
+ CREATE FUNCTION booktown.check_book_addition() RETURNS opaque
145
+ LANGUAGE plpgsql
146
+ AS $$
147
+ DECLARE
148
+ id_number INTEGER;
149
+ book_isbn TEXT;
150
+ BEGIN
151
+
152
+ SELECT INTO id_number id FROM customers WHERE id = NEW.customer_id;
153
+
154
+ IF NOT FOUND THEN
155
+ RAISE EXCEPTION 'Invalid customer ID number.';
156
+ END IF;
157
+
158
+ SELECT INTO book_isbn isbn FROM editions WHERE isbn = NEW.isbn;
159
+
160
+ IF NOT FOUND THEN
161
+ RAISE EXCEPTION 'Invalid ISBN.';
162
+ END IF;
163
+
164
+ UPDATE stock SET stock = stock -1 WHERE isbn = NEW.isbn;
165
+
166
+ RETURN NEW;
167
+ END;
168
+ $$;
169
+
170
+
171
+ --
172
+ -- Name: check_shipment_addition(); Type: FUNCTION; Schema: booktown; Owner: -
173
+ --
174
+
175
+ CREATE FUNCTION booktown.check_shipment_addition() RETURNS trigger
176
+ LANGUAGE plpgsql
177
+ AS $$
178
+ DECLARE
179
+ -- Declare a variable to hold the customer ID.
180
+ id_number INTEGER;
181
+
182
+ -- Declare a variable to hold the ISBN.
183
+ book_isbn TEXT;
184
+ BEGIN
185
+
186
+ -- If there is an ID number that matches the customer ID in
187
+ -- the new table, retrieve it from the customers table.
188
+ SELECT INTO id_number id FROM customers WHERE id = NEW.customer_id;
189
+
190
+ -- If there was no matching ID number, raise an exception.
191
+ IF NOT FOUND THEN
192
+ RAISE EXCEPTION 'Invalid customer ID number.';
193
+ END IF;
194
+
195
+ -- If there is an ISBN that matches the ISBN specified in the
196
+ -- new table, retrieve it from the editions table.
197
+ SELECT INTO book_isbn isbn FROM editions WHERE isbn = NEW.isbn;
198
+
199
+ -- If there is no matching ISBN, raise an exception.
200
+ IF NOT FOUND THEN
201
+ RAISE EXCEPTION 'Invalid ISBN.';
202
+ END IF;
203
+
204
+ -- If the previous checks succeeded, update the stock amount
205
+ -- for INSERT commands.
206
+ IF TG_OP = 'INSERT' THEN
207
+ UPDATE stock SET stock = stock -1 WHERE isbn = NEW.isbn;
208
+ END IF;
209
+
210
+ RETURN NEW;
211
+ END;
212
+ $$;
213
+
214
+
215
+ --
216
+ -- Name: compound_word(text, text); Type: FUNCTION; Schema: booktown; Owner: -
217
+ --
218
+
219
+ CREATE FUNCTION booktown.compound_word(text, text) RETURNS text
220
+ LANGUAGE plpgsql
221
+ AS $_$
222
+ DECLARE
223
+ -- defines an alias name for the two input values
224
+ word1 ALIAS FOR $1;
225
+ word2 ALIAS FOR $2;
226
+ BEGIN
227
+ -- displays the resulting joined words
228
+ RETURN word1 || word2;
229
+ END;
230
+ $_$;
231
+
232
+
233
+ --
234
+ -- Name: count_by_two(integer); Type: FUNCTION; Schema: booktown; Owner: -
235
+ --
236
+
237
+ CREATE FUNCTION booktown.count_by_two(integer) RETURNS integer
238
+ LANGUAGE plpgsql
239
+ AS $_$
240
+ DECLARE
241
+ userNum ALIAS FOR $1;
242
+ i integer;
243
+ BEGIN
244
+ i := 1;
245
+ WHILE userNum[1] < 20 LOOP
246
+ i = i+1;
247
+ return userNum;
248
+ END LOOP;
249
+
250
+ END;
251
+ $_$;
252
+
253
+
254
+ --
255
+ -- Name: double_price(double precision); Type: FUNCTION; Schema: booktown; Owner: -
256
+ --
257
+
258
+ CREATE FUNCTION booktown.double_price(double precision) RETURNS double precision
259
+ LANGUAGE plpgsql
260
+ AS $_$
261
+ DECLARE
262
+ BEGIN
263
+ return $1 * 2;
264
+ END;
265
+ $_$;
266
+
267
+
268
+ --
269
+ -- Name: extract_all_titles(); Type: FUNCTION; Schema: booktown; Owner: -
270
+ --
271
+
272
+ CREATE FUNCTION booktown.extract_all_titles() RETURNS text
273
+ LANGUAGE plpgsql
274
+ AS $$
275
+ DECLARE
276
+ sub_id INTEGER;
277
+ text_output TEXT = ' ';
278
+ sub_title TEXT;
279
+ row_data books%ROWTYPE;
280
+ BEGIN
281
+ FOR i IN 0..15 LOOP
282
+ SELECT INTO sub_title subject FROM subjects WHERE id = i;
283
+ text_output = text_output || '
284
+ ' || sub_title || ':
285
+ ';
286
+
287
+ FOR row_data IN SELECT * FROM books
288
+ WHERE subject_id = i LOOP
289
+
290
+ IF NOT FOUND THEN
291
+ text_output := text_output || 'None.
292
+ ';
293
+ ELSE
294
+ text_output := text_output || row_data.title || '
295
+ ';
296
+ END IF;
297
+
298
+ END LOOP;
299
+ END LOOP;
300
+ RETURN text_output;
301
+ END;
302
+ $$;
303
+
304
+
305
+ --
306
+ -- Name: extract_all_titles2(); Type: FUNCTION; Schema: booktown; Owner: -
307
+ --
308
+
309
+ CREATE FUNCTION booktown.extract_all_titles2() RETURNS text
310
+ LANGUAGE plpgsql
311
+ AS $$
312
+ DECLARE
313
+ sub_id INTEGER;
314
+ text_output TEXT = ' ';
315
+ sub_title TEXT;
316
+ row_data books%ROWTYPE;
317
+ BEGIN
318
+ FOR i IN 0..15 LOOP
319
+ SELECT INTO sub_title subject FROM subjects WHERE id = i;
320
+ text_output = text_output || '
321
+ ' || sub_title || ':
322
+ ';
323
+
324
+ FOR row_data IN SELECT * FROM books
325
+ WHERE subject_id = i LOOP
326
+
327
+ text_output := text_output || row_data.title || '
328
+ ';
329
+
330
+ END LOOP;
331
+ END LOOP;
332
+ RETURN text_output;
333
+ END;
334
+ $$;
335
+
336
+
337
+ --
338
+ -- Name: extract_title(integer); Type: FUNCTION; Schema: booktown; Owner: -
339
+ --
340
+
341
+ CREATE FUNCTION booktown.extract_title(integer) RETURNS text
342
+ LANGUAGE plpgsql
343
+ AS $_$
344
+ DECLARE
345
+ sub_id ALIAS FOR $1;
346
+ text_output TEXT :='
347
+ ';
348
+ row_data RECORD;
349
+ BEGIN
350
+ FOR row_data IN SELECT * FROM books
351
+ WHERE subject_id = sub_id ORDER BY title LOOP
352
+ text_output := text_output || row_data.title || '
353
+ ';
354
+ END LOOP;
355
+ RETURN text_output;
356
+ END;
357
+ $_$;
358
+
359
+
360
+ --
361
+ -- Name: first(); Type: FUNCTION; Schema: booktown; Owner: -
362
+ --
363
+
364
+ CREATE FUNCTION booktown.first() RETURNS integer
365
+ LANGUAGE plpgsql
366
+ AS $$
367
+ DecLarE
368
+ oNe IntEgER := 1;
369
+ bEGiN
370
+ ReTUrn oNE;
371
+ eNd;
372
+ $$;
373
+
374
+
375
+ --
376
+ -- Name: get_author(integer); Type: FUNCTION; Schema: booktown; Owner: -
377
+ --
378
+
379
+ CREATE FUNCTION booktown.get_author(integer) RETURNS text
380
+ LANGUAGE plpgsql
381
+ AS $_$
382
+ DECLARE
383
+
384
+ -- Declare an alias for the function argument,
385
+ -- which should be the id of the author.
386
+ author_id ALIAS FOR $1;
387
+
388
+ -- Declare a variable that uses the structure of
389
+ -- the authors table.
390
+ found_author authors%ROWTYPE;
391
+
392
+ BEGIN
393
+
394
+ -- Retrieve a row of author information for
395
+ -- the author whose id number matches
396
+ -- the argument received by the function.
397
+ SELECT INTO found_author * FROM authors WHERE id = author_id;
398
+
399
+ -- Return the first
400
+ RETURN found_author.first_name || ' ' || found_author.last_name;
401
+
402
+ END;
403
+ $_$;
404
+
405
+
406
+ --
407
+ -- Name: get_author(text); Type: FUNCTION; Schema: booktown; Owner: -
408
+ --
409
+
410
+ CREATE FUNCTION booktown.get_author(text) RETURNS text
411
+ LANGUAGE plpgsql
412
+ AS $_$
413
+ DECLARE
414
+
415
+ -- Declare an alias for the function argument,
416
+ -- which should be the first name of an author.
417
+ f_name ALIAS FOR $1;
418
+
419
+ -- Declare a variable with the same type as
420
+ -- the last_name field of the authors table.
421
+ l_name authors.last_name%TYPE;
422
+
423
+ BEGIN
424
+
425
+ -- Retrieve the last name of an author from the
426
+ -- authors table whose first name matches the
427
+ -- argument received by the function, and
428
+ -- insert it into the l_name variable.
429
+ SELECT INTO l_name last_name FROM authors WHERE first_name = f_name;
430
+
431
+ -- Return the first name and last name, separated
432
+ -- by a space.
433
+ return f_name || ' ' || l_name;
434
+
435
+ END;
436
+ $_$;
437
+
438
+
439
+ --
440
+ -- Name: get_customer_id(text, text); Type: FUNCTION; Schema: booktown; Owner: -
441
+ --
442
+
443
+ CREATE FUNCTION booktown.get_customer_id(text, text) RETURNS integer
444
+ LANGUAGE plpgsql
445
+ AS $_$
446
+ DECLARE
447
+
448
+ -- Declare aliases for user input.
449
+ l_name ALIAS FOR $1;
450
+ f_name ALIAS FOR $2;
451
+
452
+ -- Declare a variable to hold the customer ID number.
453
+ customer_id INTEGER;
454
+
455
+ BEGIN
456
+
457
+ -- Retrieve the customer ID number of the customer whose first and last
458
+ -- name match the values supplied as function arguments.
459
+ SELECT INTO customer_id id FROM customers
460
+ WHERE last_name = l_name AND first_name = f_name;
461
+
462
+ -- Return the ID number.
463
+ RETURN customer_id;
464
+ END;
465
+ $_$;
466
+
467
+
468
+ --
469
+ -- Name: get_customer_name(integer); Type: FUNCTION; Schema: booktown; Owner: -
470
+ --
471
+
472
+ CREATE FUNCTION booktown.get_customer_name(integer) RETURNS text
473
+ LANGUAGE plpgsql
474
+ AS $_$
475
+ DECLARE
476
+
477
+ -- Declare aliases for user input.
478
+ customer_id ALIAS FOR $1;
479
+
480
+ -- Declare variables to hold the customer name.
481
+ customer_fname TEXT;
482
+ customer_lname TEXT;
483
+
484
+ BEGIN
485
+
486
+ -- Retrieve the customer first and last name for the customer whose
487
+ -- ID matches the value supplied as a function argument.
488
+ SELECT INTO customer_fname, customer_lname
489
+ first_name, last_name FROM customers
490
+ WHERE id = customer_id;
491
+
492
+ -- Return the name.
493
+ RETURN customer_fname || ' ' || customer_lname;
494
+ END;
495
+ $_$;
496
+
497
+
498
+ --
499
+ -- Name: givename(); Type: FUNCTION; Schema: booktown; Owner: -
500
+ --
501
+
502
+ CREATE FUNCTION booktown.givename() RETURNS opaque
503
+ LANGUAGE plpgsql
504
+ AS $$
505
+ DECLARE
506
+ tablename text;
507
+ BEGIN
508
+
509
+ tablename = TG_RELNAME;
510
+ INSERT INTO INVENTORY values (123, tablename);
511
+ return old;
512
+ END;
513
+ $$;
514
+
515
+
516
+ --
517
+ -- Name: html_linebreaks(text); Type: FUNCTION; Schema: booktown; Owner: -
518
+ --
519
+
520
+ CREATE FUNCTION booktown.html_linebreaks(text) RETURNS text
521
+ LANGUAGE plpgsql
522
+ AS $_$
523
+ DECLARE
524
+ formatted_string text := '';
525
+ BEGIN
526
+ FOR i IN 0 .. length($1) LOOP
527
+ IF substr($1, i, 1) = '
528
+ ' THEN
529
+ formatted_string := formatted_string || '<br>';
530
+ ELSE
531
+ formatted_string := formatted_string || substr($1, i, 1);
532
+ END IF;
533
+ END LOOP;
534
+ RETURN formatted_string;
535
+ END;
536
+ $_$;
537
+
538
+
539
+ --
540
+ -- Name: in_stock(integer, integer); Type: FUNCTION; Schema: booktown; Owner: -
541
+ --
542
+
543
+ CREATE FUNCTION booktown.in_stock(integer, integer) RETURNS boolean
544
+ LANGUAGE plpgsql
545
+ AS $_$
546
+ DECLARE
547
+ b_id ALIAS FOR $1;
548
+ b_edition ALIAS FOR $2;
549
+ b_isbn TEXT;
550
+ stock_amount INTEGER;
551
+ BEGIN
552
+ -- This SELECT INTO statement retrieves the ISBN
553
+ -- number of the row in the editions table that had
554
+ -- both the book ID number and edition number that
555
+ -- were provided as function arguments.
556
+ SELECT INTO b_isbn isbn FROM editions WHERE
557
+ book_id = b_id AND edition = b_edition;
558
+
559
+ -- Check to see if the ISBN number retrieved
560
+ -- is NULL. This will happen if there is not an
561
+ -- existing book with both the ID number and edition
562
+ -- number specified in the function arguments.
563
+ -- If the ISBN is null, the function returns a
564
+ -- FALSE value and ends.
565
+ IF b_isbn IS NULL THEN
566
+ RETURN FALSE;
567
+ END IF;
568
+
569
+ -- Retrieve the amount of books available from the
570
+ -- stock table and record the number in the
571
+ -- stock_amount variable.
572
+ SELECT INTO stock_amount stock FROM stock WHERE isbn = b_isbn;
573
+
574
+ -- Use an IF/THEN/ELSE check to see if the amount
575
+ -- of books available is less than, or equal to 0.
576
+ -- If so, return FALSE. If not, return TRUE.
577
+ IF stock_amount <= 0 THEN
578
+ RETURN FALSE;
579
+ ELSE
580
+ RETURN TRUE;
581
+ END IF;
582
+ END;
583
+ $_$;
584
+
585
+
586
+ --
587
+ -- Name: isbn_to_title(text); Type: FUNCTION; Schema: booktown; Owner: -
588
+ --
589
+
590
+ CREATE FUNCTION booktown.isbn_to_title(text) RETURNS text
591
+ LANGUAGE sql
592
+ AS $_$SELECT title FROM books
593
+ JOIN editions AS e (isbn, id)
594
+ USING (id)
595
+ WHERE isbn = $1$_$;
596
+
597
+
598
+ --
599
+ -- Name: mixed(); Type: FUNCTION; Schema: booktown; Owner: -
600
+ --
601
+
602
+ CREATE FUNCTION booktown.mixed() RETURNS integer
603
+ LANGUAGE plpgsql
604
+ AS $$
605
+ DecLarE
606
+ --assigns 1 to the oNe variable
607
+ oNe IntEgER
608
+ := 1;
609
+
610
+ bEGiN
611
+
612
+ --displays the value of oNe
613
+ ReTUrn oNe;
614
+ eNd;
615
+ $$;
616
+
617
+
618
+ --
619
+ -- Name: raise_test(); Type: FUNCTION; Schema: booktown; Owner: -
620
+ --
621
+
622
+ CREATE FUNCTION booktown.raise_test() RETURNS integer
623
+ LANGUAGE plpgsql
624
+ AS $$
625
+ DECLARE
626
+
627
+ -- Declare an integer variable for testing.
628
+
629
+ an_integer INTEGER = 1;
630
+
631
+ BEGIN
632
+
633
+ -- Raise a debug level message.
634
+
635
+ RAISE DEBUG 'The raise_test() function began.';
636
+
637
+ an_integer = an_integer + 1;
638
+
639
+ -- Raise a notice stating that the an_integer
640
+ -- variable was changed, then raise another notice
641
+ -- stating its new value.
642
+
643
+ RAISE NOTICE 'Variable an_integer was changed.';
644
+ RAISE NOTICE 'Variable an_integer value is now %.',an_integer;
645
+
646
+ -- Raise an exception.
647
+
648
+ RAISE EXCEPTION 'Variable % changed. Aborting transaction.',an_integer;
649
+
650
+ END;
651
+ $$;
652
+
653
+
654
+ --
655
+ -- Name: ship_item(text, text, text); Type: FUNCTION; Schema: booktown; Owner: -
656
+ --
657
+
658
+ CREATE FUNCTION booktown.ship_item(text, text, text) RETURNS integer
659
+ LANGUAGE plpgsql
660
+ AS $_$
661
+ DECLARE
662
+ l_name ALIAS FOR $1;
663
+ f_name ALIAS FOR $2;
664
+ book_isbn ALIAS FOR $3;
665
+ book_id INTEGER;
666
+ customer_id INTEGER;
667
+
668
+ BEGIN
669
+
670
+ SELECT INTO customer_id get_customer_id(l_name,f_name);
671
+
672
+ IF customer_id = -1 THEN
673
+ RETURN -1;
674
+ END IF;
675
+
676
+ SELECT INTO book_id book_id FROM editions WHERE isbn = book_isbn;
677
+
678
+ IF NOT FOUND THEN
679
+ RETURN -1;
680
+ END IF;
681
+
682
+ PERFORM add_shipment(customer_id,book_isbn);
683
+
684
+ RETURN 1;
685
+ END;
686
+ $_$;
687
+
688
+
689
+ --
690
+ -- Name: stock_amount(integer, integer); Type: FUNCTION; Schema: booktown; Owner: -
691
+ --
692
+
693
+ CREATE FUNCTION booktown.stock_amount(integer, integer) RETURNS integer
694
+ LANGUAGE plpgsql
695
+ AS $_$
696
+ DECLARE
697
+ -- Declare aliases for function arguments.
698
+ b_id ALIAS FOR $1;
699
+ b_edition ALIAS FOR $2;
700
+ -- Declare variable to store the ISBN number.
701
+ b_isbn TEXT;
702
+ -- Declare variable to store the stock amount.
703
+ stock_amount INTEGER;
704
+ BEGIN
705
+ -- This SELECT INTO statement retrieves the ISBN
706
+ -- number of the row in the editions table that had
707
+ -- both the book ID number and edition number that
708
+ -- were provided as function arguments.
709
+ SELECT INTO b_isbn isbn FROM editions WHERE
710
+ book_id = b_id AND edition = b_edition;
711
+
712
+ -- Check to see if the ISBN number retrieved
713
+ -- is NULL. This will happen if there is not an
714
+ -- existing book with both the ID number and edition
715
+ -- number specified in the function arguments.
716
+ -- If the ISBN is null, the function returns a
717
+ -- value of -1 and ends.
718
+ IF b_isbn IS NULL THEN
719
+ RETURN -1;
720
+ END IF;
721
+
722
+ -- Retrieve the amount of books available from the
723
+ -- stock table and record the number in the
724
+ -- stock_amount variable.
725
+ SELECT INTO stock_amount stock FROM stock WHERE isbn = b_isbn;
726
+
727
+ -- Return the amount of books available.
728
+ RETURN stock_amount;
729
+ END;
730
+ $_$;
731
+
732
+
733
+ --
734
+ -- Name: sync_authors_and_books(); Type: FUNCTION; Schema: booktown; Owner: -
735
+ --
736
+
737
+ CREATE FUNCTION booktown.sync_authors_and_books() RETURNS trigger
738
+ LANGUAGE plpgsql
739
+ AS $$
740
+ BEGIN
741
+ IF TG_OP = 'UPDATE' THEN
742
+ UPDATE books SET author_id = new.id WHERE author_id = old.id;
743
+ END IF;
744
+ RETURN new;
745
+ END;
746
+ $$;
747
+
748
+
749
+ --
750
+ -- Name: test(integer); Type: FUNCTION; Schema: booktown; Owner: -
751
+ --
752
+
753
+ CREATE FUNCTION booktown.test(integer) RETURNS integer
754
+ LANGUAGE plpgsql
755
+ AS $_$
756
+
757
+ DECLARE
758
+ -- defines the variable as ALIAS
759
+ variable ALIAS FOR $1;
760
+ BEGIN
761
+ -- displays the variable after multiplying it by two
762
+ return variable * 2.0;
763
+ END;
764
+ $_$;
765
+
766
+
767
+ --
768
+ -- Name: test_check_a_id(); Type: FUNCTION; Schema: booktown; Owner: -
769
+ --
770
+
771
+ CREATE FUNCTION booktown.test_check_a_id() RETURNS opaque
772
+ LANGUAGE plpgsql
773
+ AS $$
774
+ BEGIN
775
+ -- checks to make sure the author id
776
+ -- inserted is not left blank or less than 100
777
+
778
+ IF NEW.a_id ISNULL THEN
779
+ RAISE EXCEPTION
780
+ 'The author id cannot be left blank!';
781
+ ELSE
782
+ IF NEW.a_id < 100 THEN
783
+ RAISE EXCEPTION
784
+ 'Please insert a valid author id.';
785
+ ELSE
786
+ RETURN NEW;
787
+ END IF;
788
+ END IF;
789
+ END;
790
+ $$;
791
+
792
+
793
+ --
794
+ -- Name: title(integer); Type: FUNCTION; Schema: booktown; Owner: -
795
+ --
796
+
797
+ CREATE FUNCTION booktown.title(integer) RETURNS text
798
+ LANGUAGE sql
799
+ AS $_$SELECT title from books where id = $1$_$;
800
+
801
+
802
+ --
803
+ -- Name: triple_price(double precision); Type: FUNCTION; Schema: booktown; Owner: -
804
+ --
805
+
806
+ CREATE FUNCTION booktown.triple_price(double precision) RETURNS double precision
807
+ LANGUAGE plpgsql
808
+ AS $_$
809
+ DECLARE
810
+ -- Declare input_price as an alias for the
811
+ -- argument variable normally referenced with
812
+ -- the $1 identifier.
813
+ input_price ALIAS FOR $1;
814
+
815
+ BEGIN
816
+ -- Return the input price multiplied by three.
817
+ RETURN input_price * 3;
818
+ END;
819
+ $_$;
820
+
821
+
822
+ --
823
+ -- Name: sum(text); Type: AGGREGATE; Schema: booktown; Owner: -
824
+ --
825
+
826
+ CREATE AGGREGATE booktown.sum(text) (
827
+ SFUNC = textcat,
828
+ STYPE = text,
829
+ INITCOND = ''
830
+ );
831
+
832
+
833
+ SET default_tablespace = '';
834
+
835
+ SET default_with_oids = false;
836
+
837
+ --
838
+ -- Name: alternate_stock; Type: TABLE; Schema: booktown; Owner: -
839
+ --
840
+
841
+ CREATE TABLE booktown.alternate_stock (
842
+ isbn text,
843
+ cost numeric(5,2),
844
+ retail numeric(5,2),
845
+ stock integer
846
+ );
847
+
848
+
849
+ --
850
+ -- Name: author_ids; Type: SEQUENCE; Schema: booktown; Owner: -
851
+ --
852
+
853
+ CREATE SEQUENCE booktown.author_ids
854
+ START WITH 0
855
+ INCREMENT BY 1
856
+ MINVALUE 0
857
+ MAXVALUE 2147483647
858
+ CACHE 1;
859
+
860
+
861
+ --
862
+ -- Name: authors; Type: TABLE; Schema: booktown; Owner: -
863
+ --
864
+
865
+ CREATE TABLE booktown.authors (
866
+ id integer NOT NULL,
867
+ last_name text,
868
+ first_name text
869
+ );
870
+
871
+
872
+ --
873
+ -- Name: book_backup; Type: TABLE; Schema: booktown; Owner: -
874
+ --
875
+
876
+ CREATE TABLE booktown.book_backup (
877
+ id integer,
878
+ title text,
879
+ author_id integer,
880
+ subject_id integer
881
+ );
882
+
883
+
884
+ --
885
+ -- Name: book_ids; Type: SEQUENCE; Schema: booktown; Owner: -
886
+ --
887
+
888
+ CREATE SEQUENCE booktown.book_ids
889
+ START WITH 0
890
+ INCREMENT BY 1
891
+ MINVALUE 0
892
+ MAXVALUE 2147483647
893
+ CACHE 1;
894
+
895
+
896
+ --
897
+ -- Name: book_queue; Type: TABLE; Schema: booktown; Owner: -
898
+ --
899
+
900
+ CREATE TABLE booktown.book_queue (
901
+ title text NOT NULL,
902
+ author_id integer,
903
+ subject_id integer,
904
+ approved boolean
905
+ );
906
+
907
+
908
+ --
909
+ -- Name: books; Type: TABLE; Schema: booktown; Owner: -
910
+ --
911
+
912
+ CREATE TABLE booktown.books (
913
+ id integer NOT NULL,
914
+ title text NOT NULL,
915
+ author_id integer,
916
+ subject_id integer
917
+ );
918
+
919
+
920
+ --
921
+ -- Name: customers; Type: TABLE; Schema: booktown; Owner: -
922
+ --
923
+
924
+ CREATE TABLE booktown.customers (
925
+ id integer NOT NULL,
926
+ last_name text,
927
+ first_name text
928
+ );
929
+
930
+
931
+ --
932
+ -- Name: daily_inventory; Type: TABLE; Schema: booktown; Owner: -
933
+ --
934
+
935
+ CREATE TABLE booktown.daily_inventory (
936
+ isbn text,
937
+ is_stocked boolean
938
+ );
939
+
940
+
941
+ --
942
+ -- Name: distinguished_authors; Type: TABLE; Schema: booktown; Owner: -
943
+ --
944
+
945
+ CREATE TABLE booktown.distinguished_authors (
946
+ award text
947
+ )
948
+ INHERITS (booktown.authors);
949
+
950
+
951
+ --
952
+ -- Name: editions; Type: TABLE; Schema: booktown; Owner: -
953
+ --
954
+
955
+ CREATE TABLE booktown.editions (
956
+ isbn text NOT NULL,
957
+ book_id integer,
958
+ edition integer,
959
+ publisher_id integer,
960
+ publication date,
961
+ type character(1),
962
+ CONSTRAINT integrity CHECK (((book_id IS NOT NULL) AND (edition IS NOT NULL)))
963
+ );
964
+
965
+
966
+ --
967
+ -- Name: employees; Type: TABLE; Schema: booktown; Owner: -
968
+ --
969
+
970
+ CREATE TABLE booktown.employees (
971
+ id integer NOT NULL,
972
+ last_name text NOT NULL,
973
+ first_name text,
974
+ CONSTRAINT employees_id CHECK ((id > 100))
975
+ );
976
+
977
+
978
+ --
979
+ -- Name: favorite_authors; Type: TABLE; Schema: booktown; Owner: -
980
+ --
981
+
982
+ CREATE TABLE booktown.favorite_authors (
983
+ employee_id integer,
984
+ authors_and_titles text[]
985
+ );
986
+
987
+
988
+ --
989
+ -- Name: favorite_books; Type: TABLE; Schema: booktown; Owner: -
990
+ --
991
+
992
+ CREATE TABLE booktown.favorite_books (
993
+ employee_id integer,
994
+ books text[]
995
+ );
996
+
997
+
998
+ --
999
+ -- Name: money_example; Type: TABLE; Schema: booktown; Owner: -
1000
+ --
1001
+
1002
+ CREATE TABLE booktown.money_example (
1003
+ money_cash money,
1004
+ numeric_cash numeric(6,2)
1005
+ );
1006
+
1007
+
1008
+ --
1009
+ -- Name: my_list; Type: TABLE; Schema: booktown; Owner: -
1010
+ --
1011
+
1012
+ CREATE TABLE booktown.my_list (
1013
+ todos text
1014
+ );
1015
+
1016
+
1017
+ --
1018
+ -- Name: numeric_values; Type: TABLE; Schema: booktown; Owner: -
1019
+ --
1020
+
1021
+ CREATE TABLE booktown.numeric_values (
1022
+ num numeric(30,6)
1023
+ );
1024
+
1025
+
1026
+ --
1027
+ -- Name: publishers; Type: TABLE; Schema: booktown; Owner: -
1028
+ --
1029
+
1030
+ CREATE TABLE booktown.publishers (
1031
+ id integer NOT NULL,
1032
+ name text,
1033
+ address text
1034
+ );
1035
+
1036
+
1037
+ --
1038
+ -- Name: shipments; Type: TABLE; Schema: booktown; Owner: -
1039
+ --
1040
+
1041
+ CREATE TABLE booktown.shipments (
1042
+ id integer DEFAULT nextval(('"shipments_ship_id_seq"'::text)::regclass) NOT NULL,
1043
+ customer_id integer,
1044
+ isbn text,
1045
+ ship_date timestamp with time zone
1046
+ );
1047
+
1048
+
1049
+ --
1050
+ -- Name: recent_shipments; Type: VIEW; Schema: booktown; Owner: -
1051
+ --
1052
+
1053
+ CREATE VIEW booktown.recent_shipments AS
1054
+ SELECT count(*) AS num_shipped,
1055
+ max(shipments.ship_date) AS max,
1056
+ b.title
1057
+ FROM ((booktown.shipments
1058
+ JOIN booktown.editions USING (isbn))
1059
+ JOIN booktown.books b(book_id, title, author_id, subject_id) USING (book_id))
1060
+ GROUP BY b.title
1061
+ ORDER BY (count(*)) DESC;
1062
+
1063
+
1064
+ --
1065
+ -- Name: schedules; Type: TABLE; Schema: booktown; Owner: -
1066
+ --
1067
+
1068
+ CREATE TABLE booktown.schedules (
1069
+ employee_id integer NOT NULL,
1070
+ schedule text
1071
+ );
1072
+
1073
+
1074
+ --
1075
+ -- Name: shipments_ship_id_seq; Type: SEQUENCE; Schema: booktown; Owner: -
1076
+ --
1077
+
1078
+ CREATE SEQUENCE booktown.shipments_ship_id_seq
1079
+ START WITH 0
1080
+ INCREMENT BY 1
1081
+ MINVALUE 0
1082
+ MAXVALUE 2147483647
1083
+ CACHE 1;
1084
+
1085
+
1086
+ --
1087
+ -- Name: states; Type: TABLE; Schema: booktown; Owner: -
1088
+ --
1089
+
1090
+ CREATE TABLE booktown.states (
1091
+ id integer NOT NULL,
1092
+ name text,
1093
+ abbreviation character(2)
1094
+ );
1095
+
1096
+
1097
+ --
1098
+ -- Name: stock; Type: TABLE; Schema: booktown; Owner: -
1099
+ --
1100
+
1101
+ CREATE TABLE booktown.stock (
1102
+ isbn text NOT NULL,
1103
+ cost numeric(5,2),
1104
+ retail numeric(5,2),
1105
+ stock integer
1106
+ );
1107
+
1108
+
1109
+ --
1110
+ -- Name: stock_backup; Type: TABLE; Schema: booktown; Owner: -
1111
+ --
1112
+
1113
+ CREATE TABLE booktown.stock_backup (
1114
+ isbn text,
1115
+ cost numeric(5,2),
1116
+ retail numeric(5,2),
1117
+ stock integer
1118
+ );
1119
+
1120
+
1121
+ --
1122
+ -- Name: stock_view; Type: VIEW; Schema: booktown; Owner: -
1123
+ --
1124
+
1125
+ CREATE VIEW booktown.stock_view AS
1126
+ SELECT stock.isbn,
1127
+ stock.retail,
1128
+ stock.stock
1129
+ FROM booktown.stock;
1130
+
1131
+
1132
+ --
1133
+ -- Name: subject_ids; Type: SEQUENCE; Schema: booktown; Owner: -
1134
+ --
1135
+
1136
+ CREATE SEQUENCE booktown.subject_ids
1137
+ START WITH 0
1138
+ INCREMENT BY 1
1139
+ MINVALUE 0
1140
+ MAXVALUE 2147483647
1141
+ CACHE 1;
1142
+
1143
+
1144
+ --
1145
+ -- Name: subjects; Type: TABLE; Schema: booktown; Owner: -
1146
+ --
1147
+
1148
+ CREATE TABLE booktown.subjects (
1149
+ id integer NOT NULL,
1150
+ subject text,
1151
+ location text
1152
+ );
1153
+
1154
+
1155
+ --
1156
+ -- Name: text_sorting; Type: TABLE; Schema: booktown; Owner: -
1157
+ --
1158
+
1159
+ CREATE TABLE booktown.text_sorting (
1160
+ letter character(1)
1161
+ );
1162
+
1163
+
1164
+ --
1165
+ -- Data for Name: alternate_stock; Type: TABLE DATA; Schema: booktown; Owner: -
1166
+ --
1167
+
1168
+ COPY booktown.alternate_stock (isbn, cost, retail, stock) FROM stdin;
1169
+ 0385121679 29.00 36.95 65
1170
+ 039480001X 30.00 32.95 31
1171
+ 0394900014 23.00 23.95 0
1172
+ 044100590X 36.00 45.95 89
1173
+ 0441172717 17.00 21.95 77
1174
+ 0451160916 24.00 28.95 22
1175
+ 0451198492 36.00 46.95 0
1176
+ 0451457994 17.00 22.95 0
1177
+ 0590445065 23.00 23.95 10
1178
+ 0679803335 20.00 24.95 18
1179
+ 0694003611 25.00 28.95 50
1180
+ 0760720002 18.00 23.95 28
1181
+ 0823015505 26.00 28.95 16
1182
+ 0929605942 19.00 21.95 25
1183
+ 1885418035 23.00 24.95 77
1184
+ 0394800753 16.00 16.95 4
1185
+ \.
1186
+
1187
+
1188
+ --
1189
+ -- Data for Name: authors; Type: TABLE DATA; Schema: booktown; Owner: -
1190
+ --
1191
+
1192
+ COPY booktown.authors (id, last_name, first_name) FROM stdin;
1193
+ 1111 Denham Ariel
1194
+ 1212 Worsley John
1195
+ 15990 Bourgeois Paulette
1196
+ 25041 Bianco Margery Williams
1197
+ 16 Alcott Louisa May
1198
+ 4156 King Stephen
1199
+ 1866 Herbert Frank
1200
+ 1644 Hogarth Burne
1201
+ 2031 Brown Margaret Wise
1202
+ 115 Poe Edgar Allen
1203
+ 7805 Lutz Mark
1204
+ 7806 Christiansen Tom
1205
+ 1533 Brautigan Richard
1206
+ 1717 Brite Poppy Z.
1207
+ 2112 Gorey Edward
1208
+ 2001 Clarke Arthur C.
1209
+ 1213 Brookins Andrew
1210
+ \.
1211
+
1212
+
1213
+ --
1214
+ -- Data for Name: book_backup; Type: TABLE DATA; Schema: booktown; Owner: -
1215
+ --
1216
+
1217
+ COPY booktown.book_backup (id, title, author_id, subject_id) FROM stdin;
1218
+ 7808 The Shining 4156 9
1219
+ 4513 Dune 1866 15
1220
+ 4267 2001: A Space Odyssey 2001 15
1221
+ 1608 The Cat in the Hat 1809 2
1222
+ 1590 Bartholomew and the Oobleck 1809 2
1223
+ 25908 Franklin in the Dark 15990 2
1224
+ 1501 Goodnight Moon 2031 2
1225
+ 190 Little Women 16 6
1226
+ 1234 The Velveteen Rabbit 25041 3
1227
+ 2038 Dynamic Anatomy 1644 0
1228
+ 156 The Tell-Tale Heart 115 9
1229
+ 41472 Practical PostgreSQL 1212 4
1230
+ 41473 Programming Python 7805 4
1231
+ 41477 Learning Python 7805 4
1232
+ 41478 Perl Cookbook 7806 4
1233
+ 7808 The Shining 4156 9
1234
+ 4513 Dune 1866 15
1235
+ 4267 2001: A Space Odyssey 2001 15
1236
+ 1608 The Cat in the Hat 1809 2
1237
+ 1590 Bartholomew and the Oobleck 1809 2
1238
+ 25908 Franklin in the Dark 15990 2
1239
+ 1501 Goodnight Moon 2031 2
1240
+ 190 Little Women 16 6
1241
+ 1234 The Velveteen Rabbit 25041 3
1242
+ 2038 Dynamic Anatomy 1644 0
1243
+ 156 The Tell-Tale Heart 115 9
1244
+ 41473 Programming Python 7805 4
1245
+ 41477 Learning Python 7805 4
1246
+ 41478 Perl Cookbook 7806 4
1247
+ 41472 Practical PostgreSQL 1212 4
1248
+ \.
1249
+
1250
+
1251
+ --
1252
+ -- Data for Name: book_queue; Type: TABLE DATA; Schema: booktown; Owner: -
1253
+ --
1254
+
1255
+ COPY booktown.book_queue (title, author_id, subject_id, approved) FROM stdin;
1256
+ Learning Python 7805 4 t
1257
+ Perl Cookbook 7806 4 t
1258
+ \.
1259
+
1260
+
1261
+ --
1262
+ -- Data for Name: books; Type: TABLE DATA; Schema: booktown; Owner: -
1263
+ --
1264
+
1265
+ COPY booktown.books (id, title, author_id, subject_id) FROM stdin;
1266
+ 7808 The Shining 4156 9
1267
+ 4513 Dune 1866 15
1268
+ 4267 2001: A Space Odyssey 2001 15
1269
+ 1608 The Cat in the Hat 1809 2
1270
+ 1590 Bartholomew and the Oobleck 1809 2
1271
+ 25908 Franklin in the Dark 15990 2
1272
+ 1501 Goodnight Moon 2031 2
1273
+ 190 Little Women 16 6
1274
+ 1234 The Velveteen Rabbit 25041 3
1275
+ 2038 Dynamic Anatomy 1644 0
1276
+ 156 The Tell-Tale Heart 115 9
1277
+ 41473 Programming Python 7805 4
1278
+ 41477 Learning Python 7805 4
1279
+ 41478 Perl Cookbook 7806 4
1280
+ 41472 Practical PostgreSQL 1212 4
1281
+ \.
1282
+
1283
+
1284
+ --
1285
+ -- Data for Name: customers; Type: TABLE DATA; Schema: booktown; Owner: -
1286
+ --
1287
+
1288
+ COPY booktown.customers (id, last_name, first_name) FROM stdin;
1289
+ 107 Jackson Annie
1290
+ 112 Gould Ed
1291
+ 142 Allen Chad
1292
+ 146 Williams James
1293
+ 172 Brown Richard
1294
+ 185 Morrill Eric
1295
+ 221 King Jenny
1296
+ 270 Bollman Julie
1297
+ 388 Morrill Royce
1298
+ 409 Holloway Christine
1299
+ 430 Black Jean
1300
+ 476 Clark James
1301
+ 480 Thomas Rich
1302
+ 488 Young Trevor
1303
+ 574 Bennett Laura
1304
+ 652 Anderson Jonathan
1305
+ 655 Olson Dave
1306
+ 671 Brown Chuck
1307
+ 723 Eisele Don
1308
+ 724 Holloway Adam
1309
+ 738 Gould Shirley
1310
+ 830 Robertson Royce
1311
+ 853 Black Wendy
1312
+ 860 Owens Tim
1313
+ 880 Robinson Tammy
1314
+ 898 Gerdes Kate
1315
+ 964 Gould Ramon
1316
+ 1045 Owens Jean
1317
+ 1125 Bollman Owen
1318
+ 1149 Becker Owen
1319
+ 1123 Corner Kathy
1320
+ \.
1321
+
1322
+
1323
+ --
1324
+ -- Data for Name: daily_inventory; Type: TABLE DATA; Schema: booktown; Owner: -
1325
+ --
1326
+
1327
+ COPY booktown.daily_inventory (isbn, is_stocked) FROM stdin;
1328
+ 039480001X t
1329
+ 044100590X t
1330
+ 0451198492 f
1331
+ 0394900014 f
1332
+ 0441172717 t
1333
+ 0451160916 f
1334
+ 0385121679 \N
1335
+ \.
1336
+
1337
+
1338
+ --
1339
+ -- Data for Name: distinguished_authors; Type: TABLE DATA; Schema: booktown; Owner: -
1340
+ --
1341
+
1342
+ COPY booktown.distinguished_authors (id, last_name, first_name, award) FROM stdin;
1343
+ 25043 Simon Neil Pulitzer Prize
1344
+ 1809 Geisel Theodor Seuss Pulitzer Prize
1345
+ \.
1346
+
1347
+
1348
+ --
1349
+ -- Data for Name: editions; Type: TABLE DATA; Schema: booktown; Owner: -
1350
+ --
1351
+
1352
+ COPY booktown.editions (isbn, book_id, edition, publisher_id, publication, type) FROM stdin;
1353
+ 039480001X 1608 1 59 1957-03-01 h
1354
+ 0451160916 7808 1 75 1981-08-01 p
1355
+ 0394800753 1590 1 59 1949-03-01 p
1356
+ 0590445065 25908 1 150 1987-03-01 p
1357
+ 0694003611 1501 1 65 1947-03-04 p
1358
+ 0679803335 1234 1 102 1922-01-01 p
1359
+ 0760720002 190 1 91 1868-01-01 p
1360
+ 0394900014 1608 1 59 1957-01-01 p
1361
+ 0385121679 7808 2 75 1993-10-01 h
1362
+ 1885418035 156 1 163 1995-03-28 p
1363
+ 0929605942 156 2 171 1998-12-01 p
1364
+ 0441172717 4513 2 99 1998-09-01 p
1365
+ 044100590X 4513 3 99 1999-10-01 h
1366
+ 0451457994 4267 3 101 2000-09-12 p
1367
+ 0451198492 4267 3 101 1999-10-01 h
1368
+ 0823015505 2038 1 62 1958-01-01 p
1369
+ 0596000855 41473 2 113 2001-03-01 p
1370
+ \.
1371
+
1372
+
1373
+ --
1374
+ -- Data for Name: employees; Type: TABLE DATA; Schema: booktown; Owner: -
1375
+ --
1376
+
1377
+ COPY booktown.employees (id, last_name, first_name) FROM stdin;
1378
+ 101 Appel Vincent
1379
+ 102 Holloway Michael
1380
+ 105 Connoly Sarah
1381
+ 104 Noble Ben
1382
+ 103 Joble David
1383
+ 106 Hall Timothy
1384
+ 1008 Williams \N
1385
+ \.
1386
+
1387
+
1388
+ --
1389
+ -- Data for Name: favorite_authors; Type: TABLE DATA; Schema: booktown; Owner: -
1390
+ --
1391
+
1392
+ COPY booktown.favorite_authors (employee_id, authors_and_titles) FROM stdin;
1393
+ 102 {{"J.R.R. Tolkien","The Silmarillion"},{"Charles Dickens","Great Expectations"},{"Ariel Denham","Attic Lives"}}
1394
+ \.
1395
+
1396
+
1397
+ --
1398
+ -- Data for Name: favorite_books; Type: TABLE DATA; Schema: booktown; Owner: -
1399
+ --
1400
+
1401
+ COPY booktown.favorite_books (employee_id, books) FROM stdin;
1402
+ 102 {"The Hitchhiker's Guide to the Galaxy","The Restauraunt at the End of the Universe"}
1403
+ 103 {"There and Back Again: A Hobbit's Holiday","Kittens Squared"}
1404
+ \.
1405
+
1406
+
1407
+ --
1408
+ -- Data for Name: money_example; Type: TABLE DATA; Schema: booktown; Owner: -
1409
+ --
1410
+
1411
+ COPY booktown.money_example (money_cash, numeric_cash) FROM stdin;
1412
+ $12.24 12.24
1413
+ \.
1414
+
1415
+
1416
+ --
1417
+ -- Data for Name: my_list; Type: TABLE DATA; Schema: booktown; Owner: -
1418
+ --
1419
+
1420
+ COPY booktown.my_list (todos) FROM stdin;
1421
+ Pick up laundry.
1422
+ Send out bills.
1423
+ Wrap up Grand Unifying Theory for publication.
1424
+ \.
1425
+
1426
+
1427
+ --
1428
+ -- Data for Name: numeric_values; Type: TABLE DATA; Schema: booktown; Owner: -
1429
+ --
1430
+
1431
+ COPY booktown.numeric_values (num) FROM stdin;
1432
+ 68719476736.000000
1433
+ 68719476737.000000
1434
+ 6871947673778.000000
1435
+ 999999999999999999999999.999900
1436
+ 999999999999999999999999.999999
1437
+ -999999999999999999999999.999999
1438
+ -100000000000000000000000.999999
1439
+ 1.999999
1440
+ 2.000000
1441
+ 2.000000
1442
+ 999999999999999999999999.999999
1443
+ 999999999999999999999999.000000
1444
+ \.
1445
+
1446
+
1447
+ --
1448
+ -- Data for Name: publishers; Type: TABLE DATA; Schema: booktown; Owner: -
1449
+ --
1450
+
1451
+ COPY booktown.publishers (id, name, address) FROM stdin;
1452
+ 150 Kids Can Press Kids Can Press, 29 Birch Ave. Toronto, ON M4V 1E2
1453
+ 91 Henry Holt & Company, Inc. Henry Holt & Company, Inc. 115 West 18th Street New York, NY 10011
1454
+ 113 O'Reilly & Associates O'Reilly & Associates, Inc. 101 Morris St, Sebastopol, CA 95472
1455
+ 62 Watson-Guptill Publications 1515 Boradway, New York, NY 10036
1456
+ 105 Noonday Press Farrar Straus & Giroux Inc, 19 Union Square W, New York, NY 10003
1457
+ 99 Ace Books The Berkley Publishing Group, Penguin Putnam Inc, 375 Hudson St, New York, NY 10014
1458
+ 101 Roc Penguin Putnam Inc, 375 Hudson St, New York, NY 10014
1459
+ 163 Mojo Press Mojo Press, PO Box 1215, Dripping Springs, TX 78720
1460
+ 171 Books of Wonder Books of Wonder, 16 W. 18th St. New York, NY, 10011
1461
+ 102 Penguin Penguin Putnam Inc, 375 Hudson St, New York, NY 10014
1462
+ 75 Doubleday Random House, Inc, 1540 Broadway, New York, NY 10036
1463
+ 65 HarperCollins HarperCollins Publishers, 10 E 53rd St, New York, NY 10022
1464
+ 59 Random House Random House, Inc, 1540 Broadway, New York, NY 10036
1465
+ \.
1466
+
1467
+
1468
+ --
1469
+ -- Data for Name: schedules; Type: TABLE DATA; Schema: booktown; Owner: -
1470
+ --
1471
+
1472
+ COPY booktown.schedules (employee_id, schedule) FROM stdin;
1473
+ 102 Mon - Fri, 9am - 5pm
1474
+ \.
1475
+
1476
+
1477
+ --
1478
+ -- Data for Name: shipments; Type: TABLE DATA; Schema: booktown; Owner: -
1479
+ --
1480
+
1481
+ COPY booktown.shipments (id, customer_id, isbn, ship_date) FROM stdin;
1482
+ 375 142 039480001X 2001-08-06 18:29:21+02
1483
+ 323 671 0451160916 2001-08-14 19:36:41+02
1484
+ 998 1045 0590445065 2001-08-12 21:09:47+02
1485
+ 749 172 0694003611 2001-08-11 19:52:34+02
1486
+ 662 655 0679803335 2001-08-09 16:30:07+02
1487
+ 806 1125 0760720002 2001-08-05 18:34:04+02
1488
+ 102 146 0394900014 2001-08-11 22:34:08+02
1489
+ 813 112 0385121679 2001-08-08 18:53:46+02
1490
+ 652 724 1885418035 2001-08-14 22:41:39+02
1491
+ 599 430 0929605942 2001-08-10 17:29:42+02
1492
+ 969 488 0441172717 2001-08-14 17:42:58+02
1493
+ 433 898 044100590X 2001-08-12 17:46:35+02
1494
+ 660 409 0451457994 2001-08-07 20:56:42+02
1495
+ 310 738 0451198492 2001-08-15 23:02:01+02
1496
+ 510 860 0823015505 2001-08-14 16:33:47+02
1497
+ 997 185 039480001X 2001-08-10 22:47:52+02
1498
+ 999 221 0451160916 2001-08-14 22:45:51+02
1499
+ 56 880 0590445065 2001-08-14 22:49:00+02
1500
+ 72 574 0694003611 2001-08-06 16:49:44+02
1501
+ 146 270 039480001X 2001-08-13 18:42:10+02
1502
+ 981 652 0451160916 2001-08-08 17:36:44+02
1503
+ 95 480 0590445065 2001-08-10 16:29:52+02
1504
+ 593 476 0694003611 2001-08-15 20:57:40+02
1505
+ 977 853 0679803335 2001-08-09 18:30:46+02
1506
+ 117 185 0760720002 2001-08-07 22:00:48+02
1507
+ 406 1123 0394900014 2001-08-13 18:47:04+02
1508
+ 340 1149 0385121679 2001-08-12 22:39:22+02
1509
+ 871 388 1885418035 2001-08-07 20:31:57+02
1510
+ 1000 221 039480001X 2001-09-15 01:46:32+02
1511
+ 1001 107 039480001X 2001-09-15 02:42:22+02
1512
+ 754 107 0394800753 2001-08-11 18:55:05+02
1513
+ 458 107 0394800753 2001-08-07 19:58:36+02
1514
+ 189 107 0394800753 2001-08-06 20:46:36+02
1515
+ 720 107 0394800753 2001-08-08 19:46:13+02
1516
+ 1002 107 0394800753 2001-09-22 20:23:28+02
1517
+ 2 107 0394800753 2001-09-23 05:58:56+02
1518
+ \.
1519
+
1520
+
1521
+ --
1522
+ -- Data for Name: states; Type: TABLE DATA; Schema: booktown; Owner: -
1523
+ --
1524
+
1525
+ COPY booktown.states (id, name, abbreviation) FROM stdin;
1526
+ 42 Washington WA
1527
+ 51 Oregon OR
1528
+ \.
1529
+
1530
+
1531
+ --
1532
+ -- Data for Name: stock; Type: TABLE DATA; Schema: booktown; Owner: -
1533
+ --
1534
+
1535
+ COPY booktown.stock (isbn, cost, retail, stock) FROM stdin;
1536
+ 0385121679 29.00 36.95 65
1537
+ 039480001X 30.00 32.95 31
1538
+ 0394900014 23.00 23.95 0
1539
+ 044100590X 36.00 45.95 89
1540
+ 0441172717 17.00 21.95 77
1541
+ 0451160916 24.00 28.95 22
1542
+ 0451198492 36.00 46.95 0
1543
+ 0451457994 17.00 22.95 0
1544
+ 0590445065 23.00 23.95 10
1545
+ 0679803335 20.00 24.95 18
1546
+ 0694003611 25.00 28.95 50
1547
+ 0760720002 18.00 23.95 28
1548
+ 0823015505 26.00 28.95 16
1549
+ 0929605942 19.00 21.95 25
1550
+ 1885418035 23.00 24.95 77
1551
+ 0394800753 16.00 16.95 4
1552
+ \.
1553
+
1554
+
1555
+ --
1556
+ -- Data for Name: stock_backup; Type: TABLE DATA; Schema: booktown; Owner: -
1557
+ --
1558
+
1559
+ COPY booktown.stock_backup (isbn, cost, retail, stock) FROM stdin;
1560
+ 0385121679 29.00 36.95 65
1561
+ 039480001X 30.00 32.95 31
1562
+ 0394800753 16.00 16.95 0
1563
+ 0394900014 23.00 23.95 0
1564
+ 044100590X 36.00 45.95 89
1565
+ 0441172717 17.00 21.95 77
1566
+ 0451160916 24.00 28.95 22
1567
+ 0451198492 36.00 46.95 0
1568
+ 0451457994 17.00 22.95 0
1569
+ 0590445065 23.00 23.95 10
1570
+ 0679803335 20.00 24.95 18
1571
+ 0694003611 25.00 28.95 50
1572
+ 0760720002 18.00 23.95 28
1573
+ 0823015505 26.00 28.95 16
1574
+ 0929605942 19.00 21.95 25
1575
+ 1885418035 23.00 24.95 77
1576
+ \.
1577
+
1578
+
1579
+ --
1580
+ -- Data for Name: subjects; Type: TABLE DATA; Schema: booktown; Owner: -
1581
+ --
1582
+
1583
+ COPY booktown.subjects (id, subject, location) FROM stdin;
1584
+ 0 Arts Creativity St
1585
+ 1 Business Productivity Ave
1586
+ 2 Children's Books Kids Ct
1587
+ 3 Classics Academic Rd
1588
+ 4 Computers Productivity Ave
1589
+ 5 Cooking Creativity St
1590
+ 6 Drama Main St
1591
+ 7 Entertainment Main St
1592
+ 8 History Academic Rd
1593
+ 9 Horror Black Raven Dr
1594
+ 10 Mystery Black Raven Dr
1595
+ 11 Poetry Sunset Dr
1596
+ 12 Religion \N
1597
+ 13 Romance Main St
1598
+ 14 Science Productivity Ave
1599
+ 15 Science Fiction Main St
1600
+ \.
1601
+
1602
+
1603
+ --
1604
+ -- Data for Name: text_sorting; Type: TABLE DATA; Schema: booktown; Owner: -
1605
+ --
1606
+
1607
+ COPY booktown.text_sorting (letter) FROM stdin;
1608
+ 0
1609
+ 1
1610
+ 2
1611
+ 3
1612
+ A
1613
+ B
1614
+ C
1615
+ D
1616
+ a
1617
+ b
1618
+ c
1619
+ d
1620
+ \.
1621
+
1622
+
1623
+ --
1624
+ -- Name: author_ids; Type: SEQUENCE SET; Schema: booktown; Owner: -
1625
+ --
1626
+
1627
+ SELECT pg_catalog.setval('booktown.author_ids', 25044, true);
1628
+
1629
+
1630
+ --
1631
+ -- Name: book_ids; Type: SEQUENCE SET; Schema: booktown; Owner: -
1632
+ --
1633
+
1634
+ SELECT pg_catalog.setval('booktown.book_ids', 41478, true);
1635
+
1636
+
1637
+ --
1638
+ -- Name: shipments_ship_id_seq; Type: SEQUENCE SET; Schema: booktown; Owner: -
1639
+ --
1640
+
1641
+ SELECT pg_catalog.setval('booktown.shipments_ship_id_seq', 1011, true);
1642
+
1643
+
1644
+ --
1645
+ -- Name: subject_ids; Type: SEQUENCE SET; Schema: booktown; Owner: -
1646
+ --
1647
+
1648
+ SELECT pg_catalog.setval('booktown.subject_ids', 15, true);
1649
+
1650
+
1651
+ --
1652
+ -- Name: authors authors_pkey; Type: CONSTRAINT; Schema: booktown; Owner: -
1653
+ --
1654
+
1655
+ ALTER TABLE ONLY booktown.authors
1656
+ ADD CONSTRAINT authors_pkey PRIMARY KEY (id);
1657
+
1658
+
1659
+ --
1660
+ -- Name: books books_id_pkey; Type: CONSTRAINT; Schema: booktown; Owner: -
1661
+ --
1662
+
1663
+ ALTER TABLE ONLY booktown.books
1664
+ ADD CONSTRAINT books_id_pkey PRIMARY KEY (id);
1665
+
1666
+
1667
+ --
1668
+ -- Name: customers customers_pkey; Type: CONSTRAINT; Schema: booktown; Owner: -
1669
+ --
1670
+
1671
+ ALTER TABLE ONLY booktown.customers
1672
+ ADD CONSTRAINT customers_pkey PRIMARY KEY (id);
1673
+
1674
+
1675
+ --
1676
+ -- Name: employees employees_pkey; Type: CONSTRAINT; Schema: booktown; Owner: -
1677
+ --
1678
+
1679
+ ALTER TABLE ONLY booktown.employees
1680
+ ADD CONSTRAINT employees_pkey PRIMARY KEY (id);
1681
+
1682
+
1683
+ --
1684
+ -- Name: editions pkey; Type: CONSTRAINT; Schema: booktown; Owner: -
1685
+ --
1686
+
1687
+ ALTER TABLE ONLY booktown.editions
1688
+ ADD CONSTRAINT pkey PRIMARY KEY (isbn);
1689
+
1690
+
1691
+ --
1692
+ -- Name: publishers publishers_pkey; Type: CONSTRAINT; Schema: booktown; Owner: -
1693
+ --
1694
+
1695
+ ALTER TABLE ONLY booktown.publishers
1696
+ ADD CONSTRAINT publishers_pkey PRIMARY KEY (id);
1697
+
1698
+
1699
+ --
1700
+ -- Name: schedules schedules_pkey; Type: CONSTRAINT; Schema: booktown; Owner: -
1701
+ --
1702
+
1703
+ ALTER TABLE ONLY booktown.schedules
1704
+ ADD CONSTRAINT schedules_pkey PRIMARY KEY (employee_id);
1705
+
1706
+
1707
+ --
1708
+ -- Name: states state_pkey; Type: CONSTRAINT; Schema: booktown; Owner: -
1709
+ --
1710
+
1711
+ ALTER TABLE ONLY booktown.states
1712
+ ADD CONSTRAINT state_pkey PRIMARY KEY (id);
1713
+
1714
+
1715
+ --
1716
+ -- Name: stock stock_pkey; Type: CONSTRAINT; Schema: booktown; Owner: -
1717
+ --
1718
+
1719
+ ALTER TABLE ONLY booktown.stock
1720
+ ADD CONSTRAINT stock_pkey PRIMARY KEY (isbn);
1721
+
1722
+
1723
+ --
1724
+ -- Name: subjects subjects_pkey; Type: CONSTRAINT; Schema: booktown; Owner: -
1725
+ --
1726
+
1727
+ ALTER TABLE ONLY booktown.subjects
1728
+ ADD CONSTRAINT subjects_pkey PRIMARY KEY (id);
1729
+
1730
+
1731
+ --
1732
+ -- Name: books_title_idx; Type: INDEX; Schema: booktown; Owner: -
1733
+ --
1734
+
1735
+ CREATE INDEX books_title_idx ON booktown.books USING btree (title);
1736
+
1737
+
1738
+ --
1739
+ -- Name: shipments_ship_id_key; Type: INDEX; Schema: booktown; Owner: -
1740
+ --
1741
+
1742
+ CREATE UNIQUE INDEX shipments_ship_id_key ON booktown.shipments USING btree (id);
1743
+
1744
+
1745
+ --
1746
+ -- Name: text_idx; Type: INDEX; Schema: booktown; Owner: -
1747
+ --
1748
+
1749
+ CREATE INDEX text_idx ON booktown.text_sorting USING btree (letter);
1750
+
1751
+
1752
+ --
1753
+ -- Name: unique_publisher_idx; Type: INDEX; Schema: booktown; Owner: -
1754
+ --
1755
+
1756
+ CREATE UNIQUE INDEX unique_publisher_idx ON booktown.publishers USING btree (name);
1757
+
1758
+
1759
+ --
1760
+ -- Name: editions sync_stock_with_editions; Type: RULE; Schema: booktown; Owner: -
1761
+ --
1762
+
1763
+ CREATE RULE sync_stock_with_editions AS
1764
+ ON UPDATE TO booktown.editions DO UPDATE booktown.stock SET isbn = new.isbn
1765
+ WHERE (stock.isbn = old.isbn);
1766
+
1767
+
1768
+ --
1769
+ -- Name: shipments check_shipment; Type: TRIGGER; Schema: booktown; Owner: -
1770
+ --
1771
+
1772
+ CREATE TRIGGER check_shipment BEFORE INSERT OR UPDATE ON booktown.shipments FOR EACH ROW EXECUTE PROCEDURE booktown.check_shipment_addition();
1773
+
1774
+
1775
+ --
1776
+ -- Name: authors sync_authors_books; Type: TRIGGER; Schema: booktown; Owner: -
1777
+ --
1778
+
1779
+ CREATE TRIGGER sync_authors_books BEFORE UPDATE ON booktown.authors FOR EACH ROW EXECUTE PROCEDURE booktown.sync_authors_and_books();
1780
+
1781
+
1782
+ --
1783
+ -- Name: schedules valid_employee; Type: FK CONSTRAINT; Schema: booktown; Owner: -
1784
+ --
1785
+
1786
+ ALTER TABLE ONLY booktown.schedules
1787
+ ADD CONSTRAINT valid_employee FOREIGN KEY (employee_id) REFERENCES booktown.employees(id) MATCH FULL;
1788
+
1789
+
1790
+ --
1791
+ -- PostgreSQL database dump complete
1792
+ --
1793
+