pg_migrate 0.1.7 → 0.1.11

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +34 -34
  3. data/.gitmodules +3 -3
  4. data/Gemfile +9 -9
  5. data/Gemfile.lock +39 -39
  6. data/LICENSE +21 -21
  7. data/README.md +33 -33
  8. data/Rakefile +2 -2
  9. data/bin/pg_migrate +6 -6
  10. data/lib/pg_migrate/builder.rb +214 -214
  11. data/lib/pg_migrate/command_line.rb +242 -242
  12. data/lib/pg_migrate/config_parser.rb +48 -48
  13. data/lib/pg_migrate/manifest_reader.rb +102 -102
  14. data/lib/pg_migrate/migration.rb +11 -11
  15. data/lib/pg_migrate/migrator.rb +94 -94
  16. data/lib/pg_migrate/package.rb +152 -152
  17. data/lib/pg_migrate/package_templates/Gemfile.erb +3 -3
  18. data/lib/pg_migrate/package_templates/bin/migrate.rb +9 -9
  19. data/lib/pg_migrate/package_templates/gemspec.erb +21 -21
  20. data/lib/pg_migrate/package_templates/lib/gem/version.rb +3 -3
  21. data/lib/pg_migrate/package_templates/lib/gem.rb +12 -12
  22. data/lib/pg_migrate/props.rb +19 -19
  23. data/lib/pg_migrate/sql_reader.rb +51 -51
  24. data/lib/pg_migrate/templates/bootstrap.erb +175 -175
  25. data/lib/pg_migrate/templates/up.erb +30 -30
  26. data/lib/pg_migrate/util.rb +73 -73
  27. data/lib/pg_migrate/version.rb +3 -3
  28. data/lib/pg_migrate.rb +40 -40
  29. data/pg_migrate.gemspec +29 -28
  30. data/spec/database.yml +8 -8
  31. data/spec/pg_migrate/builder_spec.rb +113 -113
  32. data/spec/pg_migrate/command_line_spec.rb +53 -53
  33. data/spec/pg_migrate/config_parser_spec.rb +18 -18
  34. data/spec/pg_migrate/db_utility.rb +73 -73
  35. data/spec/pg_migrate/input_manifests/single_manifest/manifest +3 -3
  36. data/spec/pg_migrate/input_manifests/single_manifest/up/single1.sql +29 -29
  37. data/spec/pg_migrate/manifest_reader_spec.rb +19 -19
  38. data/spec/pg_migrate/migrator_spec.rb +68 -68
  39. data/spec/pg_migrate/package_spec.rb +38 -38
  40. data/spec/pg_migrate/sql_reader_spec.rb +21 -21
  41. data/spec/spec_helper.rb +15 -15
  42. metadata +5 -5
data/pg_migrate.gemspec CHANGED
@@ -1,28 +1,29 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/pg_migrate/version', __FILE__)
3
- lib=File.expand_path('../lib', __FILE__)
4
-
5
-
6
- Gem::Specification.new do |gem|
7
- gem.authors = ["Seth Call"]
8
- gem.email = ["sethcall@gmail.com"]
9
- gem.description = %q{Simple migration tool focused on Postgresql}
10
- gem.summary = %q{Create migration scripts in raw SQL that work regardless if they are run from the pg_migrate command-line, psql, or native code integration. More documentation exists on the project homepage.)}
11
- gem.homepage = "https://github.com/sethcall/pg_migrate"
12
-
13
- gem.files = `git ls-files`.split($\)
14
- gem.files += `cd #{lib}/pg_migrate/templates; git ls-files *.erb`.split($\).map {|f| "lib/pg_migrate/templates/#{f}"}
15
- gem.files.delete("lib/pg_migrate/templates")
16
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
- gem.name = "pg_migrate"
19
- gem.require_paths = ["lib"]
20
- gem.version = PgMigrate::VERSION
21
-
22
- gem.add_dependency('logging', '1.7.2')
23
-
24
- gem.add_dependency('pg', '0.14.0')
25
- gem.add_dependency('thor', '0.15.4')
26
- #gem.add_dependency('rubygems', '1.8.24')
27
- end
28
-
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/pg_migrate/version', __FILE__)
3
+ lib=File.expand_path('../lib', __FILE__)
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.authors = ["Seth Call"]
7
+ gem.email = ["sethcall@gmail.com"]
8
+ gem.description = %q{Simple migration tool focused on Postgresql}
9
+ gem.summary = %q{Create migration scripts in raw SQL that work regardless if they are run from the pg_migrate command-line, psql, or native code integration. More documentation exists on the project homepage.)}
10
+ gem.homepage = "https://github.com/sethcall/pg_migrate"
11
+
12
+ gem.files = `git ls-files`.split($\)
13
+ gem.files += ['lib/pg_migrate/templates/bootstrap.erb']
14
+ gem.files += ['lib/pg_migrate/templates/up.erb']
15
+ gem.files.delete("lib/pg_migrate/templates")
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.name = "pg_migrate"
19
+ gem.require_paths = ["lib"]
20
+ gem.version = PgMigrate::VERSION
21
+
22
+ gem.add_dependency('logging', '1.7.2')
23
+
24
+ gem.add_dependency('pg', '0.15.1')
25
+ gem.add_dependency('thor', '0.15.4')
26
+ #gem.add_dependency('rubygems', '1.8.24')
27
+
28
+ end
29
+
data/spec/database.yml CHANGED
@@ -1,9 +1,9 @@
1
- test:
2
- adapter: postgresql
3
- encoding: unicode
4
- database: pg_migrate_test
5
- pool: 5
6
- username: postgres
7
- password: postgres
8
- host: localhost
1
+ test:
2
+ adapter: postgresql
3
+ encoding: unicode
4
+ database: pg_migrate_test
5
+ pool: 5
6
+ username: postgres
7
+ password: postgres
8
+ host: localhost
9
9
  port: 5432
@@ -1,114 +1,114 @@
1
- require 'spec_helper'
2
-
3
- describe Builder do
4
-
5
- before(:all) do
6
- @manifest_reader = ManifestReader.new
7
- @sql_reader = SqlReader.new
8
- @standard_builder = Builder.new(@manifest_reader, @sql_reader)
9
- @dbutil = DbUtility.new
10
- end
11
-
12
- it "create bootstrap.sql" do
13
- standard_builder = @standard_builder
14
- target = Files.create :path => "target/bootstrap_test", :timestamp => false do
15
- standard_builder.create_bootstrap_script(Dir.pwd)
16
-
17
- # the .sql file should exist after
18
- FileTest::exists?(BOOTSTRAP_FILENAME).should == true
19
-
20
- content = nil
21
-
22
- # dynamic content should be in the file
23
- File.open(BOOTSTRAP_FILENAME, 'r') { |reader| content = reader.read }
24
-
25
- content.start_with?('-- pg_migrate bootstrap').should == true
26
- end
27
-
28
- end
29
-
30
- it "creates indempotent migrations" do
31
-
32
- def run_bootstrap(output_dir)
33
- run_migration(BOOTSTRAP_FILENAME, output_dir)
34
- end
35
-
36
- def run_migration(migration_path, output_dir)
37
- @dbutil.connect_test_database() do |conn|
38
- statements = @sql_reader.load_migration(File.join(output_dir, UP_DIRNAME, migration_path))
39
-
40
- statements.each do |statement|
41
- conn.exec(statement)
42
- end
43
- end
44
- end
45
-
46
- def verify_bootstrap()
47
- # come back in, and verify that the bootstrap tables are there
48
- @dbutil.connect_test_database() do |conn|
49
- conn.exec("SELECT table_name FROM information_schema.tables WHERE table_name = $1", [PG_MIGRATE_TABLE]) do |result|
50
- result.ntuples.should == 1
51
- result.getvalue(0, 0).should == PG_MIGRATE_TABLE
52
- end
53
-
54
- conn.exec("SELECT table_name FROM information_schema.tables WHERE table_name = $1", [PG_MIGRATIONS_TABLE]) do |result|
55
- result.ntuples.should == 1
56
- result.getvalue(0, 0).should == PG_MIGRATIONS_TABLE
57
- end
58
-
59
- end
60
- end
61
-
62
- single_manifest=File.expand_path('spec/pg_migrate/input_manifests/single_manifest')
63
- single_manifest = File.join(single_manifest, '.')
64
-
65
- input_dir = nil
66
- target = Files.create :path => "target", :timestamp => false do
67
- input_dir = dir "input_single_manifest", :src => single_manifest do
68
-
69
- end
70
- end
71
-
72
- output_dir = File.join('target', 'output_single_manifest')
73
-
74
- FileUtils.rm_rf(output_dir)
75
-
76
- @standard_builder.build(input_dir, output_dir)
77
-
78
- @dbutil.create_new_test_database()
79
-
80
- # run bootstrap once, and verify the tables now exist
81
- run_bootstrap(output_dir)
82
- verify_bootstrap()
83
-
84
- # run bootstrap again, and verify no error (implicitly), and that the tables now exist
85
- run_bootstrap(output_dir)
86
- verify_bootstrap()
87
-
88
- # now run single1.sql
89
- run_migration('single1.sql', output_dir)
90
-
91
- @dbutil.connect_test_database() do |conn|
92
- conn.exec("SELECT table_name FROM information_schema.tables WHERE table_name = $1", ["emp"]) do |result|
93
- result.ntuples.should == 1
94
- result.getvalue(0, 0).should == "emp"
95
- end
96
- end
97
-
98
- # run it again. a very certain exception should occur... 'pg_migrate: code=migration_exists'
99
- begin
100
- run_migration('single1.sql', output_dir)
101
- false.should == true
102
- rescue Exception => e
103
- e.message.index('pg_migrate: code=migration_exists').should_not == nil
104
- end
105
-
106
- @dbutil.connect_test_database() do |conn|
107
- conn.exec("SELECT table_name FROM information_schema.tables WHERE table_name = $1", ["emp"]) do |result|
108
- result.ntuples.should == 1
109
- result.getvalue(0, 0).should == "emp"
110
- end
111
- end
112
-
113
- end
1
+ require 'spec_helper'
2
+
3
+ describe Builder do
4
+
5
+ before(:all) do
6
+ @manifest_reader = ManifestReader.new
7
+ @sql_reader = SqlReader.new
8
+ @standard_builder = Builder.new(@manifest_reader, @sql_reader)
9
+ @dbutil = DbUtility.new
10
+ end
11
+
12
+ it "create bootstrap.sql" do
13
+ standard_builder = @standard_builder
14
+ target = Files.create :path => "target/bootstrap_test", :timestamp => false do
15
+ standard_builder.create_bootstrap_script(Dir.pwd)
16
+
17
+ # the .sql file should exist after
18
+ FileTest::exists?(BOOTSTRAP_FILENAME).should == true
19
+
20
+ content = nil
21
+
22
+ # dynamic content should be in the file
23
+ File.open(BOOTSTRAP_FILENAME, 'r') { |reader| content = reader.read }
24
+
25
+ content.start_with?('-- pg_migrate bootstrap').should == true
26
+ end
27
+
28
+ end
29
+
30
+ it "creates indempotent migrations" do
31
+
32
+ def run_bootstrap(output_dir)
33
+ run_migration(BOOTSTRAP_FILENAME, output_dir)
34
+ end
35
+
36
+ def run_migration(migration_path, output_dir)
37
+ @dbutil.connect_test_database() do |conn|
38
+ statements = @sql_reader.load_migration(File.join(output_dir, UP_DIRNAME, migration_path))
39
+
40
+ statements.each do |statement|
41
+ conn.exec(statement)
42
+ end
43
+ end
44
+ end
45
+
46
+ def verify_bootstrap()
47
+ # come back in, and verify that the bootstrap tables are there
48
+ @dbutil.connect_test_database() do |conn|
49
+ conn.exec("SELECT table_name FROM information_schema.tables WHERE table_name = $1", [PG_MIGRATE_TABLE]) do |result|
50
+ result.ntuples.should == 1
51
+ result.getvalue(0, 0).should == PG_MIGRATE_TABLE
52
+ end
53
+
54
+ conn.exec("SELECT table_name FROM information_schema.tables WHERE table_name = $1", [PG_MIGRATIONS_TABLE]) do |result|
55
+ result.ntuples.should == 1
56
+ result.getvalue(0, 0).should == PG_MIGRATIONS_TABLE
57
+ end
58
+
59
+ end
60
+ end
61
+
62
+ single_manifest=File.expand_path('spec/pg_migrate/input_manifests/single_manifest')
63
+ single_manifest = File.join(single_manifest, '.')
64
+
65
+ input_dir = nil
66
+ target = Files.create :path => "target", :timestamp => false do
67
+ input_dir = dir "input_single_manifest", :src => single_manifest do
68
+
69
+ end
70
+ end
71
+
72
+ output_dir = File.join('target', 'output_single_manifest')
73
+
74
+ FileUtils.rm_rf(output_dir)
75
+
76
+ @standard_builder.build(input_dir, output_dir)
77
+
78
+ @dbutil.create_new_test_database()
79
+
80
+ # run bootstrap once, and verify the tables now exist
81
+ run_bootstrap(output_dir)
82
+ verify_bootstrap()
83
+
84
+ # run bootstrap again, and verify no error (implicitly), and that the tables now exist
85
+ run_bootstrap(output_dir)
86
+ verify_bootstrap()
87
+
88
+ # now run single1.sql
89
+ run_migration('single1.sql', output_dir)
90
+
91
+ @dbutil.connect_test_database() do |conn|
92
+ conn.exec("SELECT table_name FROM information_schema.tables WHERE table_name = $1", ["emp"]) do |result|
93
+ result.ntuples.should == 1
94
+ result.getvalue(0, 0).should == "emp"
95
+ end
96
+ end
97
+
98
+ # run it again. a very certain exception should occur... 'pg_migrate: code=migration_exists'
99
+ begin
100
+ run_migration('single1.sql', output_dir)
101
+ false.should == true
102
+ rescue Exception => e
103
+ e.message.index('pg_migrate: code=migration_exists').should_not == nil
104
+ end
105
+
106
+ @dbutil.connect_test_database() do |conn|
107
+ conn.exec("SELECT table_name FROM information_schema.tables WHERE table_name = $1", ["emp"]) do |result|
108
+ result.ntuples.should == 1
109
+ result.getvalue(0, 0).should == "emp"
110
+ end
111
+ end
112
+
113
+ end
114
114
  end
@@ -1,54 +1,54 @@
1
- require 'spec_helper'
2
-
3
- describe CommandLine do
4
-
5
- before(:all) do
6
- @dbutil = DbUtility.new
7
- end
8
-
9
-
10
- it "build using config file" do
11
-
12
- single_manifest=File.expand_path('spec/pg_migrate/input_manifests/single_manifest')
13
- single_manifest=File.join(single_manifest, '.')
14
-
15
- input_dir = nil
16
- target = Files.create :path => "target", :timestamp => false do
17
- input_dir = dir "input_single_manifest", :src => single_manifest do
18
-
19
- end
20
- end
21
-
22
- output_dir = File.join("target", 'output_single_manifest')
23
-
24
- FileUtils.rm_rf(output_dir)
25
-
26
- # make a properties file on the fly, with the out parameter specified
27
- props = Properties.new
28
- props['build.out'] = output_dir
29
- props['build.force'] = "true"
30
- props['build.test'] = "false"
31
- #props['up.connopts'] = "dbname:pg_migrate_test host:localhost port:5432 user:postgres password:postgres"
32
-
33
- # and put that properties file in the input dir
34
- File.open(File.join(input_dir, PG_CONFIG), 'w') { |f| f.write(props) }
35
-
36
- # invoke pg_migrate build, with the hopes that the output dir is honored
37
- result = `bundle exec pg_migrate build -s #{input_dir}`
38
-
39
- puts "pg_migrate build output: #{result}"
40
-
41
- $?.exitstatus.should == 0
42
-
43
- FileTest::exist?(output_dir).should == true
44
- FileTest::exist?(File.join(output_dir, MANIFEST_FILENAME)).should == true
45
- FileTest::exist?(File.join(output_dir, PG_CONFIG)).should == true
46
- FileTest::exist?(File.join(output_dir, UP_DIRNAME)).should == true
47
- FileTest::exist?(File.join(output_dir, UP_DIRNAME, BOOTSTRAP_FILENAME)).should == true
48
- FileTest::exist?(File.join(output_dir, UP_DIRNAME, "single1.sql")).should == true
49
-
50
-
51
- end
52
-
53
-
1
+ require 'spec_helper'
2
+
3
+ describe CommandLine do
4
+
5
+ before(:all) do
6
+ @dbutil = DbUtility.new
7
+ end
8
+
9
+
10
+ it "build using config file" do
11
+
12
+ single_manifest=File.expand_path('spec/pg_migrate/input_manifests/single_manifest')
13
+ single_manifest=File.join(single_manifest, '.')
14
+
15
+ input_dir = nil
16
+ target = Files.create :path => "target", :timestamp => false do
17
+ input_dir = dir "input_single_manifest", :src => single_manifest do
18
+
19
+ end
20
+ end
21
+
22
+ output_dir = File.join("target", 'output_single_manifest')
23
+
24
+ FileUtils.rm_rf(output_dir)
25
+
26
+ # make a properties file on the fly, with the out parameter specified
27
+ props = Properties.new
28
+ props['build.out'] = output_dir
29
+ props['build.force'] = "true"
30
+ props['build.test'] = "false"
31
+ #props['up.connopts'] = "dbname:pg_migrate_test host:localhost port:5432 user:postgres password:postgres"
32
+
33
+ # and put that properties file in the input dir
34
+ File.open(File.join(input_dir, PG_CONFIG), 'w') { |f| f.write(props) }
35
+
36
+ # invoke pg_migrate build, with the hopes that the output dir is honored
37
+ result = `bundle exec pg_migrate build -s #{input_dir}`
38
+
39
+ puts "pg_migrate build output: #{result}"
40
+
41
+ $?.exitstatus.should == 0
42
+
43
+ FileTest::exist?(output_dir).should == true
44
+ FileTest::exist?(File.join(output_dir, MANIFEST_FILENAME)).should == true
45
+ FileTest::exist?(File.join(output_dir, PG_CONFIG)).should == true
46
+ FileTest::exist?(File.join(output_dir, UP_DIRNAME)).should == true
47
+ FileTest::exist?(File.join(output_dir, UP_DIRNAME, BOOTSTRAP_FILENAME)).should == true
48
+ FileTest::exist?(File.join(output_dir, UP_DIRNAME, "single1.sql")).should == true
49
+
50
+
51
+ end
52
+
53
+
54
54
  end
@@ -1,19 +1,19 @@
1
- require 'spec_helper'
2
-
3
- describe ConfigParser do
4
- it "parse my test database.yml file" do
5
- config = ConfigParser.rails("spec/database.yml", "test")
6
- config.should == {
7
- :dbname => "pg_migrate_test",
8
- :user => "postgres",
9
- :password => "postgres",
10
- :host => "localhost",
11
- :port => 5432
12
- }
13
- end
14
-
15
- it "run single migration" do
16
- config = ConfigParser.rails("spec/database.yml", "test")
17
- end
18
-
1
+ require 'spec_helper'
2
+
3
+ describe ConfigParser do
4
+ it "parse my test database.yml file" do
5
+ config = ConfigParser.rails("spec/database.yml", "test")
6
+ config.should == {
7
+ :dbname => "pg_migrate_test",
8
+ :user => "postgres",
9
+ :password => "postgres",
10
+ :host => "localhost",
11
+ :port => 5432
12
+ }
13
+ end
14
+
15
+ it "run single migration" do
16
+ config = ConfigParser.rails("spec/database.yml", "test")
17
+ end
18
+
19
19
  end
@@ -1,73 +1,73 @@
1
- module PgMigrate
2
-
3
- class DbUtility
4
-
5
- DEFAULT_OPTIONS = {
6
- :dbtestname => "pg_migrate_test",
7
- :dbsuperuser => "postgres",
8
- :dbsuperpass => "postgres",
9
- :dbhost => "localhost",
10
- :dbport => 5432
11
- }
12
-
13
- def initialize(options=DEFAULT_OPTIONS)
14
-
15
- options = DEFAULT_OPTIONS.merge(options)
16
-
17
- @dbtestname = options[:dbtestname]
18
- @dbsuperuser = options[:dbsuperuser]
19
- @dbsuperpass = options[:dbsuperpass]
20
- @dbhost = options[:dbhost]
21
- @dbport = options[:dbport]
22
- end
23
-
24
- def pg_connection_hasher()
25
- return {
26
- :port => @dbport,
27
- :user => @dbsuperuser,
28
- :password => @dbsuperpass,
29
- :host => @dbhost
30
- }
31
- end
32
-
33
-
34
- def create_new_test_database()
35
-
36
- # this will presumably do the right default thing,
37
- # to get us into a 'default' database where we can execute 'create database' from
38
- conn_properties = pg_connection_hasher
39
-
40
- conn_properties.delete(:dbname)
41
-
42
- conn = PG::Connection.new(conn_properties)
43
-
44
- conn.exec("DROP DATABASE IF EXISTS #{@dbtestname}").clear
45
- conn.exec("CREATE DATABASE #{@dbtestname}").clear
46
-
47
- conn.close
48
-
49
- end
50
-
51
- def connect_test_database(&block)
52
- conn = nil
53
-
54
- begin
55
- conn_properties = pg_connection_hasher
56
-
57
- conn_properties[:dbname] = @dbtestname
58
- conn = PG::Connection.open(conn_properties)
59
-
60
- yield conn
61
-
62
- ensure
63
- if !conn.nil?
64
- conn.close
65
- end
66
- end
67
-
68
-
69
- end
70
-
71
- end
72
-
73
- end
1
+ module PgMigrate
2
+
3
+ class DbUtility
4
+
5
+ DEFAULT_OPTIONS = {
6
+ :dbtestname => "pg_migrate_test",
7
+ :dbsuperuser => "postgres",
8
+ :dbsuperpass => "postgres",
9
+ :dbhost => "localhost",
10
+ :dbport => 5432
11
+ }
12
+
13
+ def initialize(options=DEFAULT_OPTIONS)
14
+
15
+ options = DEFAULT_OPTIONS.merge(options)
16
+
17
+ @dbtestname = options[:dbtestname]
18
+ @dbsuperuser = options[:dbsuperuser]
19
+ @dbsuperpass = options[:dbsuperpass]
20
+ @dbhost = options[:dbhost]
21
+ @dbport = options[:dbport]
22
+ end
23
+
24
+ def pg_connection_hasher()
25
+ return {
26
+ :port => @dbport,
27
+ :user => @dbsuperuser,
28
+ :password => @dbsuperpass,
29
+ :host => @dbhost
30
+ }
31
+ end
32
+
33
+
34
+ def create_new_test_database()
35
+
36
+ # this will presumably do the right default thing,
37
+ # to get us into a 'default' database where we can execute 'create database' from
38
+ conn_properties = pg_connection_hasher
39
+
40
+ conn_properties.delete(:dbname)
41
+
42
+ conn = PG::Connection.new(conn_properties)
43
+
44
+ conn.exec("DROP DATABASE IF EXISTS #{@dbtestname}").clear
45
+ conn.exec("CREATE DATABASE #{@dbtestname}").clear
46
+
47
+ conn.close
48
+
49
+ end
50
+
51
+ def connect_test_database(&block)
52
+ conn = nil
53
+
54
+ begin
55
+ conn_properties = pg_connection_hasher
56
+
57
+ conn_properties[:dbname] = @dbtestname
58
+ conn = PG::Connection.open(conn_properties)
59
+
60
+ yield conn
61
+
62
+ ensure
63
+ if !conn.nil?
64
+ conn.close
65
+ end
66
+ end
67
+
68
+
69
+ end
70
+
71
+ end
72
+
73
+ end
@@ -1,4 +1,4 @@
1
- # name=single
2
- # this is a comment
3
-
1
+ # name=single
2
+ # this is a comment
3
+
4
4
  single1.sql
@@ -1,29 +1,29 @@
1
- -- this is a SQL comment
2
-
3
- select 1;
4
-
5
- select 2;
6
-
7
- select
8
- 3;
9
-
10
- create table emp(id BIGSERIAL PRIMARY KEY, name varchar(255));
11
-
12
- -- a sql function
13
- CREATE FUNCTION clean_emp() RETURNS void AS '
14
- DELETE FROM emp;
15
- ' LANGUAGE SQL;
16
-
17
- -- a sql function on one line
18
- CREATE FUNCTION clean_emp2() RETURNS void AS 'DELETE FROM emp;' LANGUAGE SQL;
19
-
20
- CREATE FUNCTION populate() RETURNS integer AS $$
21
- DECLARE
22
- -- declarations
23
- BEGIN
24
- PERFORM clean_emp2();
25
- END;
26
- $$ LANGUAGE plpgsql;
27
-
28
-
29
-
1
+ -- this is a SQL comment
2
+
3
+ select 1;
4
+
5
+ select 2;
6
+
7
+ select
8
+ 3;
9
+
10
+ create table emp(id BIGSERIAL PRIMARY KEY, name varchar(255));
11
+
12
+ -- a sql function
13
+ CREATE FUNCTION clean_emp() RETURNS void AS '
14
+ DELETE FROM emp;
15
+ ' LANGUAGE SQL;
16
+
17
+ -- a sql function on one line
18
+ CREATE FUNCTION clean_emp2() RETURNS void AS 'DELETE FROM emp;' LANGUAGE SQL;
19
+
20
+ CREATE FUNCTION populate() RETURNS integer AS $$
21
+ DECLARE
22
+ -- declarations
23
+ BEGIN
24
+ PERFORM clean_emp2();
25
+ END;
26
+ $$ LANGUAGE plpgsql;
27
+
28
+
29
+