rails_workflow 0.3.9 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +2 -0
- data/app/concerns/rails_workflow/operation_status.rb +2 -0
- data/app/concerns/rails_workflow/operation_templates/assignments.rb +3 -1
- data/app/concerns/rails_workflow/operation_templates/dependencies.rb +18 -18
- data/app/concerns/rails_workflow/operations/assignments.rb +7 -5
- data/app/concerns/rails_workflow/operations/dependencies.rb +2 -0
- data/app/concerns/rails_workflow/status.rb +11 -15
- data/app/concerns/rails_workflow/user/assignment.rb +2 -0
- data/app/concerns/rails_workflow/uuid.rb +2 -0
- data/app/controllers/rails_workflow/application_controller.rb +2 -0
- data/app/controllers/rails_workflow/errors_controller.rb +2 -0
- data/app/controllers/rails_workflow/operation_templates_controller.rb +3 -1
- data/app/controllers/rails_workflow/operations_controller.rb +3 -1
- data/app/controllers/rails_workflow/process_templates_controller.rb +10 -8
- data/app/controllers/rails_workflow/processes_controller.rb +10 -8
- data/app/decorators/rails_workflow/context_decorator.rb +2 -0
- data/app/decorators/rails_workflow/decorator.rb +2 -0
- data/app/decorators/rails_workflow/operation_decorator.rb +2 -0
- data/app/decorators/rails_workflow/operation_helper_decorator.rb +2 -0
- data/app/decorators/rails_workflow/operation_template_decorator.rb +2 -0
- data/app/decorators/rails_workflow/paginating_decorator.rb +2 -0
- data/app/decorators/rails_workflow/process_decorator.rb +2 -0
- data/app/decorators/rails_workflow/process_template_decorator.rb +2 -0
- data/app/decorators/rails_workflow/status_decorator.rb +2 -0
- data/app/helpers/rails_workflow/application_helper.rb +2 -0
- data/app/jobs/rails_workflow/operation_execution_job.rb +11 -1
- data/app/models/rails_workflow/context.rb +3 -1
- data/app/models/rails_workflow/error.rb +23 -50
- data/app/models/rails_workflow/operation.rb +39 -3
- data/app/models/rails_workflow/operation_template.rb +2 -2
- data/app/models/rails_workflow/process.rb +34 -5
- data/app/models/rails_workflow/process_template.rb +12 -8
- data/app/models/rails_workflow/user_by_group_operation.rb +2 -0
- data/app/models/rails_workflow/user_by_role_operation.rb +2 -0
- data/app/models/rails_workflow/user_operation.rb +2 -0
- data/app/serializers/rails_workflow/operation_template_serializer.rb +2 -0
- data/app/serializers/rails_workflow/process_template_serializer.rb +2 -0
- data/app/services/rails_workflow/default_importer_preprocessor.rb +2 -0
- data/app/services/rails_workflow/process_importer.rb +2 -0
- data/app/views/rails_workflow/processes/index.html.slim +5 -5
- data/config/initializers/rails_workflow.rb +3 -3
- data/config/routes.rb +4 -2
- data/db/migrate/20150630174700_create_workflow_processes.rb +86 -84
- data/lib/generators/rails_workflow/install/install_generator.rb +2 -0
- data/lib/generators/rails_workflow/install/templates/create_workflow_processes.rb +86 -84
- data/lib/rails_workflow/config.rb +65 -24
- data/lib/rails_workflow/db/mysql.rb +3 -1
- data/lib/rails_workflow/db/pg.rb +3 -1
- data/lib/rails_workflow/dependency_resolver.rb +74 -0
- data/lib/rails_workflow/engine.rb +3 -1
- data/lib/rails_workflow/error_builder.rb +57 -0
- data/lib/rails_workflow/error_resolver.rb +72 -0
- data/lib/rails_workflow/operation_builder.rb +95 -0
- data/lib/rails_workflow/operation_runner.rb +113 -0
- data/lib/rails_workflow/process_builder.rb +57 -0
- data/lib/rails_workflow/process_manager.rb +66 -0
- data/lib/rails_workflow/process_runner.rb +72 -0
- data/lib/rails_workflow/version.rb +3 -1
- data/lib/rails_workflow.rb +2 -0
- data/lib/tasks/rails_workflow_tasks.rake +1 -0
- data/spec/concerns/status_spec.rb +25 -0
- data/spec/controllers/rails_workflow/operation_templates_controller_spec.rb +2 -0
- data/spec/controllers/rails_workflow/operations_controller_spec.rb +2 -0
- data/spec/controllers/rails_workflow/process_templates_controller_spec.rb +2 -0
- data/spec/controllers/rails_workflow/processes_controller_spec.rb +3 -1
- data/spec/dummy/Rakefile +2 -0
- data/spec/dummy/app/controllers/application_controller.rb +2 -0
- data/spec/dummy/app/controllers/leads_controller.rb +2 -0
- data/spec/dummy/app/controllers/sales_contacts_controller.rb +2 -0
- data/spec/dummy/app/decorators/lead_decorator.rb +2 -0
- data/spec/dummy/app/decorators/sales_contact_decorator.rb +2 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/helpers/leads_helper.rb +2 -0
- data/spec/dummy/app/helpers/sales_contacts_helper.rb +2 -0
- data/spec/dummy/app/models/bad_operation.rb +2 -0
- data/spec/dummy/app/models/bad_operation_template.rb +2 -0
- data/spec/dummy/app/models/lead.rb +2 -0
- data/spec/dummy/app/models/sales_contact.rb +2 -0
- data/spec/dummy/app/models/user.rb +2 -0
- data/spec/dummy/bin/bundle +2 -0
- data/spec/dummy/bin/rails +2 -0
- data/spec/dummy/bin/rake +2 -0
- data/spec/dummy/config/application.rb +2 -0
- data/spec/dummy/config/boot.rb +2 -0
- data/spec/dummy/config/database.yml.semaphore +2 -2
- data/spec/dummy/config/environment.rb +2 -0
- data/spec/dummy/config/environments/development.rb +2 -0
- data/spec/dummy/config/environments/production.rb +2 -0
- data/spec/dummy/config/environments/test.rb +2 -0
- data/spec/dummy/config/initializers/assets.rb +2 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +1 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +2 -0
- data/spec/dummy/config/initializers/devise.rb +2 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +2 -0
- data/spec/dummy/config/initializers/inflections.rb +1 -0
- data/spec/dummy/config/initializers/mime_types.rb +1 -0
- data/spec/dummy/config/initializers/session_store.rb +2 -0
- data/spec/dummy/config/initializers/workflow.rb +2 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +2 -0
- data/spec/dummy/config/routes.rb +2 -0
- data/spec/dummy/config.ru +2 -0
- data/spec/dummy/db/migrate/20150127171613_devise_create_users.rb +2 -0
- data/spec/dummy/db/migrate/20150130042852_create_sales_contacts.rb +2 -0
- data/spec/dummy/db/migrate/20150130043008_create_leads.rb +2 -0
- data/spec/dummy/log/development.log +110 -0
- data/spec/dummy/log/test.log +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7O/7O5OddMZvWFGpj71BCdc0vA55rhj4YPoL0XjBV4_OYk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Cy/CyixQwp8QvorgpRadtYf6_zY35nZZp0JmrhkDN16XPM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FW/FWR5Q7EP17cTcY35R1MscF6MX2HYiH5I2ZII89YLYxc.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HQ/HQuQO1k4kOyLSDXJEc8p-XR2agdkPF7mIFyh2noiNrU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/N4/N4e3G5QNTts2OVqkL0kxoP1xnAdDWnumpnH1m6WAsuY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Rs/RsIG_ias53xeb4WHWRodcMcDmVyz1QvLQNy4gV2iBSo.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WI/WI2XYMfwCaPWcjvvouKVltl9oKqKZL-BHePPLhC-rzw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Yc/YcbQRZWzddLfawePxNTEXcFFiS7asAyrujZzciT99l0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ai/aihcJWCIJGiHDpamul8bzy4jMsxnhewX6XWtkdsQ9dc.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fR/fRVQN4mU7z3MVJD9u1LMq8idpOH8o2tFh_YouMYGAM8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gU/gUFNMb7SgxFyz5ZZcGfp-VYRVIw711HUeiWonMzYrcU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/h8/h86FNb4MxO5dq40P8KcCgGwZ_uqd8nn_O2fMWGDApW8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/q7/q7cZDJXZFXTklMF8JAQSMr-MBxOKc7q1vZAPPR5RBf4.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/s9/s98GbJDqEe4PG3moRH6h-ukIZmQz9Frq4LO_Z9vCBLM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xX/xXCd205lXu7u_BuyBL0kfZwkBGJLvocHDItBfU6tMm4.cache +2 -0
- data/spec/factories/context.rb +2 -0
- data/spec/factories/operation_templates.rb +2 -0
- data/spec/factories/operations.rb +3 -1
- data/spec/factories/process_templates.rb +2 -0
- data/spec/factories/processes.rb +3 -1
- data/spec/factories/user.rb +2 -0
- data/spec/factories/workflow_errors.rb +2 -0
- data/spec/features/operations_spec.rb +2 -0
- data/spec/features/process_template_spec.rb +2 -0
- data/spec/lib/error_builder_spec.rb +137 -0
- data/spec/lib/error_resolver_spec.rb +182 -0
- data/spec/lib/operation_builder_spec.rb +69 -0
- data/spec/lib/process_builder_spec.rb +19 -0
- data/spec/{core/rails_workflow → lib}/process_manager_spec.rb +17 -27
- data/spec/models/rails_workflow/context_spec.rb +6 -3
- data/spec/models/rails_workflow/error_spec.rb +20 -147
- data/spec/models/rails_workflow/operation_spec.rb +64 -97
- data/spec/models/rails_workflow/operation_template_spec.rb +24 -11
- data/spec/models/rails_workflow/process_spec.rb +5 -2
- data/spec/models/rails_workflow/process_template_spec.rb +2 -36
- data/spec/rails_helper.rb +2 -0
- data/spec/serializers/process_template_serializer_spec.rb +2 -0
- data/spec/services/process_importer_spec.rb +2 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/support/controller_macros.rb +2 -0
- data/spec/support/pages/operations.rb +2 -0
- data/spec/support/rails_workflow/custom_operation.rb +2 -0
- data/spec/support/rails_workflow/custom_operation_template.rb +2 -0
- data/spec/{core → support}/rails_workflow/prepare_template.rb +3 -1
- data/spec/support/workflow_helper.rb +2 -0
- metadata +54 -28
- data/app/concerns/rails_workflow/operation_templates/default_builder.rb +0 -56
- data/app/concerns/rails_workflow/operations/default_runner.rb +0 -121
- data/app/concerns/rails_workflow/process_templates/default_builder.rb +0 -52
- data/app/concerns/rails_workflow/processes/default_runner.rb +0 -64
- data/app/concerns/rails_workflow/processes/dependency_resolver.rb +0 -54
- data/app/concerns/rails_workflow/reset_cache.rb +0 -13
- data/app/jobs/rails_workflow/operation_error_job.rb +0 -40
- data/app/managers/rails_workflow/process_manager.rb +0 -40
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# TODO: add spec
|
4
|
+
module RailsWorkflow
|
5
|
+
#= ProcessRunner
|
6
|
+
#
|
7
|
+
# This module contains logic of process start, stop, cancel etc.
|
8
|
+
#
|
9
|
+
class ProcessRunner
|
10
|
+
attr_reader :process
|
11
|
+
|
12
|
+
delegate :uncompleted?, :can_start?, :operations,
|
13
|
+
:workflow_errors, :parent_operation, to: :process
|
14
|
+
|
15
|
+
def initialize(process)
|
16
|
+
@process = process
|
17
|
+
end
|
18
|
+
|
19
|
+
def start
|
20
|
+
return unless can_start?
|
21
|
+
|
22
|
+
process.update_attribute(:status, Status::IN_PROGRESS)
|
23
|
+
# TODO: replace with OperationRunner
|
24
|
+
operation_runner.start(operations.where(status: Status::NOT_STARTED))
|
25
|
+
end
|
26
|
+
|
27
|
+
# Process can be completed if all sync operations is complete
|
28
|
+
def completable?
|
29
|
+
uncompleted? && workflow_errors.unresolved.size.zero?
|
30
|
+
end
|
31
|
+
|
32
|
+
def complete_parent_operation
|
33
|
+
parent_operation.complete if parent_operation.present?
|
34
|
+
end
|
35
|
+
|
36
|
+
# TODO: change to try_complete
|
37
|
+
def complete
|
38
|
+
return unless completable?
|
39
|
+
|
40
|
+
process.complete
|
41
|
+
complete_parent_operation
|
42
|
+
end
|
43
|
+
|
44
|
+
def operation_completed(operation)
|
45
|
+
build_new_operations(operation)
|
46
|
+
complete
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def build_new_operations(operation)
|
52
|
+
new_operations = dependency_resolver.build_new_operations(operation)
|
53
|
+
|
54
|
+
return if new_operations.blank?
|
55
|
+
|
56
|
+
operations.concat(new_operations)
|
57
|
+
operation_runner.start(new_operations)
|
58
|
+
end
|
59
|
+
|
60
|
+
def operation_runner
|
61
|
+
config.operation_runner
|
62
|
+
end
|
63
|
+
|
64
|
+
def dependency_resolver
|
65
|
+
@dependency_resolver ||= config.dependency_resolver.new(process)
|
66
|
+
end
|
67
|
+
|
68
|
+
def config
|
69
|
+
RailsWorkflow.config
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/rails_workflow.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
shared_examples_for 'Status' do
|
4
|
+
context '.status_code_for' do
|
5
|
+
[
|
6
|
+
['in_progress', RailsWorkflow::Status::IN_PROGRESS],
|
7
|
+
['done', RailsWorkflow::Status::DONE],
|
8
|
+
['not_started', RailsWorkflow::Status::NOT_STARTED],
|
9
|
+
['waiting', RailsWorkflow::Status::WAITING],
|
10
|
+
['error', RailsWorkflow::Status::ERROR]
|
11
|
+
].each do |word, code|
|
12
|
+
it "return code for #{word}" do
|
13
|
+
expect(described_class.status_code_for(word)).to eq code
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# let(:model) { described_class } # the class that includes the concern
|
19
|
+
#
|
20
|
+
#
|
21
|
+
# it "has a full name" do
|
22
|
+
# person = FactoryGirl.create(model.to_s.underscore.to_sym, first_name: "Stewart", last_name: "Home")
|
23
|
+
# expect(person.full_name).to eq("Stewart Home")
|
24
|
+
# end
|
25
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails_helper'
|
2
4
|
|
3
5
|
module RailsWorkflow
|
@@ -57,7 +59,7 @@ module RailsWorkflow
|
|
57
59
|
it 'creates a new WfProcess' do
|
58
60
|
expect do
|
59
61
|
post :create, { process: valid_attributes }, valid_session
|
60
|
-
end.to change(Process, :count).by(1)
|
62
|
+
end.to change(RailsWorkflow::Process, :count).by(1)
|
61
63
|
end
|
62
64
|
|
63
65
|
it 'assigns a newly created process as @process' do
|
data/spec/dummy/Rakefile
CHANGED
data/spec/dummy/bin/bundle
CHANGED
data/spec/dummy/bin/rails
CHANGED
data/spec/dummy/bin/rake
CHANGED
data/spec/dummy/config/boot.rb
CHANGED
data/spec/dummy/config/routes.rb
CHANGED
data/spec/dummy/config.ru
CHANGED
@@ -369,4 +369,114 @@ WHERE c.contype = 'f'
|
|
369
369
|
AND t1.relname = 'users'
|
370
370
|
AND t3.nspname = ANY (current_schemas(false))
|
371
371
|
ORDER BY c.conname
|
372
|
+
[0m
|
373
|
+
[1m[36mActiveRecord::SchemaMigration Load (1.1ms)[0m [1mSELECT "schema_migrations".* FROM "schema_migrations"[0m
|
374
|
+
[1m[35mActiveRecord::SchemaMigration Load (0.3ms)[0m SELECT "schema_migrations".* FROM "schema_migrations"
|
375
|
+
[1m[36m (2.9ms)[0m [1mSELECT t2.oid::regclass::text AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confupdtype AS on_update, c.confdeltype AS on_delete
|
376
|
+
FROM pg_constraint c
|
377
|
+
JOIN pg_class t1 ON c.conrelid = t1.oid
|
378
|
+
JOIN pg_class t2 ON c.confrelid = t2.oid
|
379
|
+
JOIN pg_attribute a1 ON a1.attnum = c.conkey[1] AND a1.attrelid = t1.oid
|
380
|
+
JOIN pg_attribute a2 ON a2.attnum = c.confkey[1] AND a2.attrelid = t2.oid
|
381
|
+
JOIN pg_namespace t3 ON c.connamespace = t3.oid
|
382
|
+
WHERE c.contype = 'f'
|
383
|
+
AND t1.relname = 'leads'
|
384
|
+
AND t3.nspname = ANY (current_schemas(false))
|
385
|
+
ORDER BY c.conname
|
386
|
+
[0m
|
387
|
+
[1m[35m (2.4ms)[0m SELECT t2.oid::regclass::text AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confupdtype AS on_update, c.confdeltype AS on_delete
|
388
|
+
FROM pg_constraint c
|
389
|
+
JOIN pg_class t1 ON c.conrelid = t1.oid
|
390
|
+
JOIN pg_class t2 ON c.confrelid = t2.oid
|
391
|
+
JOIN pg_attribute a1 ON a1.attnum = c.conkey[1] AND a1.attrelid = t1.oid
|
392
|
+
JOIN pg_attribute a2 ON a2.attnum = c.confkey[1] AND a2.attrelid = t2.oid
|
393
|
+
JOIN pg_namespace t3 ON c.connamespace = t3.oid
|
394
|
+
WHERE c.contype = 'f'
|
395
|
+
AND t1.relname = 'rails_workflow_contexts'
|
396
|
+
AND t3.nspname = ANY (current_schemas(false))
|
397
|
+
ORDER BY c.conname
|
398
|
+
|
399
|
+
[1m[36m (1.9ms)[0m [1mSELECT t2.oid::regclass::text AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confupdtype AS on_update, c.confdeltype AS on_delete
|
400
|
+
FROM pg_constraint c
|
401
|
+
JOIN pg_class t1 ON c.conrelid = t1.oid
|
402
|
+
JOIN pg_class t2 ON c.confrelid = t2.oid
|
403
|
+
JOIN pg_attribute a1 ON a1.attnum = c.conkey[1] AND a1.attrelid = t1.oid
|
404
|
+
JOIN pg_attribute a2 ON a2.attnum = c.confkey[1] AND a2.attrelid = t2.oid
|
405
|
+
JOIN pg_namespace t3 ON c.connamespace = t3.oid
|
406
|
+
WHERE c.contype = 'f'
|
407
|
+
AND t1.relname = 'rails_workflow_errors'
|
408
|
+
AND t3.nspname = ANY (current_schemas(false))
|
409
|
+
ORDER BY c.conname
|
410
|
+
[0m
|
411
|
+
[1m[35m (3.6ms)[0m SELECT t2.oid::regclass::text AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confupdtype AS on_update, c.confdeltype AS on_delete
|
412
|
+
FROM pg_constraint c
|
413
|
+
JOIN pg_class t1 ON c.conrelid = t1.oid
|
414
|
+
JOIN pg_class t2 ON c.confrelid = t2.oid
|
415
|
+
JOIN pg_attribute a1 ON a1.attnum = c.conkey[1] AND a1.attrelid = t1.oid
|
416
|
+
JOIN pg_attribute a2 ON a2.attnum = c.confkey[1] AND a2.attrelid = t2.oid
|
417
|
+
JOIN pg_namespace t3 ON c.connamespace = t3.oid
|
418
|
+
WHERE c.contype = 'f'
|
419
|
+
AND t1.relname = 'rails_workflow_operation_templates'
|
420
|
+
AND t3.nspname = ANY (current_schemas(false))
|
421
|
+
ORDER BY c.conname
|
422
|
+
|
423
|
+
[1m[36m (2.2ms)[0m [1mSELECT t2.oid::regclass::text AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confupdtype AS on_update, c.confdeltype AS on_delete
|
424
|
+
FROM pg_constraint c
|
425
|
+
JOIN pg_class t1 ON c.conrelid = t1.oid
|
426
|
+
JOIN pg_class t2 ON c.confrelid = t2.oid
|
427
|
+
JOIN pg_attribute a1 ON a1.attnum = c.conkey[1] AND a1.attrelid = t1.oid
|
428
|
+
JOIN pg_attribute a2 ON a2.attnum = c.confkey[1] AND a2.attrelid = t2.oid
|
429
|
+
JOIN pg_namespace t3 ON c.connamespace = t3.oid
|
430
|
+
WHERE c.contype = 'f'
|
431
|
+
AND t1.relname = 'rails_workflow_operations'
|
432
|
+
AND t3.nspname = ANY (current_schemas(false))
|
433
|
+
ORDER BY c.conname
|
434
|
+
[0m
|
435
|
+
[1m[35m (1.9ms)[0m SELECT t2.oid::regclass::text AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confupdtype AS on_update, c.confdeltype AS on_delete
|
436
|
+
FROM pg_constraint c
|
437
|
+
JOIN pg_class t1 ON c.conrelid = t1.oid
|
438
|
+
JOIN pg_class t2 ON c.confrelid = t2.oid
|
439
|
+
JOIN pg_attribute a1 ON a1.attnum = c.conkey[1] AND a1.attrelid = t1.oid
|
440
|
+
JOIN pg_attribute a2 ON a2.attnum = c.confkey[1] AND a2.attrelid = t2.oid
|
441
|
+
JOIN pg_namespace t3 ON c.connamespace = t3.oid
|
442
|
+
WHERE c.contype = 'f'
|
443
|
+
AND t1.relname = 'rails_workflow_process_templates'
|
444
|
+
AND t3.nspname = ANY (current_schemas(false))
|
445
|
+
ORDER BY c.conname
|
446
|
+
|
447
|
+
[1m[36m (1.9ms)[0m [1mSELECT t2.oid::regclass::text AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confupdtype AS on_update, c.confdeltype AS on_delete
|
448
|
+
FROM pg_constraint c
|
449
|
+
JOIN pg_class t1 ON c.conrelid = t1.oid
|
450
|
+
JOIN pg_class t2 ON c.confrelid = t2.oid
|
451
|
+
JOIN pg_attribute a1 ON a1.attnum = c.conkey[1] AND a1.attrelid = t1.oid
|
452
|
+
JOIN pg_attribute a2 ON a2.attnum = c.confkey[1] AND a2.attrelid = t2.oid
|
453
|
+
JOIN pg_namespace t3 ON c.connamespace = t3.oid
|
454
|
+
WHERE c.contype = 'f'
|
455
|
+
AND t1.relname = 'rails_workflow_processes'
|
456
|
+
AND t3.nspname = ANY (current_schemas(false))
|
457
|
+
ORDER BY c.conname
|
458
|
+
[0m
|
459
|
+
[1m[35m (2.0ms)[0m SELECT t2.oid::regclass::text AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confupdtype AS on_update, c.confdeltype AS on_delete
|
460
|
+
FROM pg_constraint c
|
461
|
+
JOIN pg_class t1 ON c.conrelid = t1.oid
|
462
|
+
JOIN pg_class t2 ON c.confrelid = t2.oid
|
463
|
+
JOIN pg_attribute a1 ON a1.attnum = c.conkey[1] AND a1.attrelid = t1.oid
|
464
|
+
JOIN pg_attribute a2 ON a2.attnum = c.confkey[1] AND a2.attrelid = t2.oid
|
465
|
+
JOIN pg_namespace t3 ON c.connamespace = t3.oid
|
466
|
+
WHERE c.contype = 'f'
|
467
|
+
AND t1.relname = 'sales_contacts'
|
468
|
+
AND t3.nspname = ANY (current_schemas(false))
|
469
|
+
ORDER BY c.conname
|
470
|
+
|
471
|
+
[1m[36m (2.0ms)[0m [1mSELECT t2.oid::regclass::text AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confupdtype AS on_update, c.confdeltype AS on_delete
|
472
|
+
FROM pg_constraint c
|
473
|
+
JOIN pg_class t1 ON c.conrelid = t1.oid
|
474
|
+
JOIN pg_class t2 ON c.confrelid = t2.oid
|
475
|
+
JOIN pg_attribute a1 ON a1.attnum = c.conkey[1] AND a1.attrelid = t1.oid
|
476
|
+
JOIN pg_attribute a2 ON a2.attnum = c.confkey[1] AND a2.attrelid = t2.oid
|
477
|
+
JOIN pg_namespace t3 ON c.connamespace = t3.oid
|
478
|
+
WHERE c.contype = 'f'
|
479
|
+
AND t1.relname = 'users'
|
480
|
+
AND t3.nspname = ANY (current_schemas(false))
|
481
|
+
ORDER BY c.conname
|
372
482
|
[0m
|