From 0116a8652a4ac93e52c12740e949c2f8e089d919 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Tue, 14 Jun 2022 17:15:52 +0530 Subject: [PATCH 001/134] test: quick-test rebase Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- .github/workflows/ci-cd.yml | 114 +- package.json | 1 + packages/nocodb/package.json | 1 + .../nocodb/tests/pg-cy-quick/01-cy-quick.sql | 4759 +++++++++++++++++ scripts/cypress/cypress.json | 3 +- .../cypress/docker-compose-pg-cy-quick.yml | 17 + .../cypress/fixtures/quickTest/noco_0_91_7.db | Bin 0 -> 634880 bytes .../integration/common/9a_QuickTest.js | 358 ++ scripts/cypress/integration/test/quickTest.js | 36 + scripts/cypress/plugins/index.js | 14 +- 10 files changed, 5289 insertions(+), 14 deletions(-) create mode 100644 packages/nocodb/tests/pg-cy-quick/01-cy-quick.sql create mode 100644 scripts/cypress/docker-compose-pg-cy-quick.yml create mode 100644 scripts/cypress/fixtures/quickTest/noco_0_91_7.db create mode 100644 scripts/cypress/integration/common/9a_QuickTest.js create mode 100644 scripts/cypress/integration/test/quickTest.js diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index 0a0596915f9..f10a65c79bd 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -61,7 +61,7 @@ jobs: if: always() uses: actions/upload-artifact@v2 with: - name: restTableOps-snapshots + name: cypress-pg-restTableOps-run-cache-snapshots path: scripts/cypress/screenshots retention-days: 2 cypress-pg-restViews-run-cache: @@ -106,7 +106,7 @@ jobs: if: always() uses: actions/upload-artifact@v2 with: - name: restTableOps-snapshots + name: cypress-pg-restViews-run-cache-snapshots path: scripts/cypress/screenshots retention-days: 2 cypress-pg-restRoles-run-cache: @@ -151,7 +151,7 @@ jobs: if: always() uses: actions/upload-artifact@v2 with: - name: restTableOps-snapshots + name: cypress-pg-restRoles-run-cache-snapshots path: scripts/cypress/screenshots retention-days: 2 cypress-pg-restMisc-run-cache: @@ -196,7 +196,7 @@ jobs: if: always() uses: actions/upload-artifact@v2 with: - name: restTableOps-snapshots + name: cypress-pg-restMisc-run-cache-snapshots path: scripts/cypress/screenshots retention-days: 2 cypress-restTableOps-run-cache: @@ -241,7 +241,7 @@ jobs: if: always() uses: actions/upload-artifact@v2 with: - name: restTableOps-snapshots + name: cypress-restTableOps-run-cache-snapshots path: scripts/cypress/screenshots retention-days: 2 cypress-restViews-run-cache: @@ -286,7 +286,7 @@ jobs: if: always() uses: actions/upload-artifact@v2 with: - name: restTableOps-snapshots + name: cypress-restViews-run-cache-snapshots path: scripts/cypress/screenshots retention-days: 2 cypress-restRoles-run-cache: @@ -331,7 +331,7 @@ jobs: if: always() uses: actions/upload-artifact@v2 with: - name: restTableOps-snapshots + name: cypress-restRoles-run-cache-snapshots path: scripts/cypress/screenshots retention-days: 2 cypress-restMisc-run-cache: @@ -376,7 +376,7 @@ jobs: if: always() uses: actions/upload-artifact@v2 with: - name: restTableOps-snapshots + name: cypress-restMisc-run-cache-snapshots path: scripts/cypress/screenshots retention-days: 2 cypress-xcdb-restTableOps-run-cache: @@ -421,7 +421,7 @@ jobs: if: always() uses: actions/upload-artifact@v2 with: - name: restTableOps-snapshots + name: cypress-xcdb-restTableOps-run-cache-snapshots path: scripts/cypress/screenshots retention-days: 2 cypress-xcdb-restViews-run-cache: @@ -466,7 +466,7 @@ jobs: if: always() uses: actions/upload-artifact@v2 with: - name: restTableOps-snapshots + name: cypress-xcdb-restViews-run-cache-snapshots path: scripts/cypress/screenshots retention-days: 2 cypress-xcdb-restRoles-run-cache: @@ -511,7 +511,7 @@ jobs: if: always() uses: actions/upload-artifact@v2 with: - name: restTableOps-snapshots + name: cypress-xcdb-restRoles-run-cache-snapshots path: scripts/cypress/screenshots retention-days: 2 cypress-xcdb-restMisc-run-cache: @@ -556,7 +556,97 @@ jobs: if: always() uses: actions/upload-artifact@v2 with: - name: restTableOps-snapshots + name: cypress-xcdb-restMisc-run-cache-snapshots + path: scripts/cypress/screenshots + retention-days: 2 + cy-quick-sqlite: + runs-on: ubuntu-20.04 + steps: + - name: Setup Node + uses: actions/setup-node@v1 + with: + node-version: 16.15.0 + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Cache node modules + uses: actions/cache@v2 + env: + cache-name: cache-node-modules + + with: + # npm cache files are stored in `~/.npm` on Linux/macOS + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Set env + run: echo "NODE_ENV=test" >> $GITHUB_ENV + - name: Cypress run + uses: cypress-io/github-action@v2 + with: + start: | + npm run build:common + npm run start:api:cache + npm run start:web + docker-compose -f ./scripts/docker-compose-cypress.yml up -d + spec: "./scripts/cypress/integration/common/9a_QuickTest.js" + wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js" + wait-on-timeout: 1200 + config-file: scripts/cypress/cypress.json + - name: Upload screenshots + if: always() + uses: actions/upload-artifact@v2 + with: + name: cy-quick-sqlite-snapshots + path: scripts/cypress/screenshots + retention-days: 2 + cy-quick-pg: + runs-on: ubuntu-20.04 + steps: + - name: Setup Node + uses: actions/setup-node@v1 + with: + node-version: 16.15.0 + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Cache node modules + uses: actions/cache@v2 + env: + cache-name: cache-node-modules + + with: + # npm cache files are stored in `~/.npm` on Linux/macOS + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Set env + run: echo "NODE_ENV=test" >> $GITHUB_ENV + - name: Cypress run + uses: cypress-io/github-action@v2 + with: + start: | + npm run build:common + npm run start:api:cache:pg + npm run start:web + docker-compose -f ./scripts/cypress/docker-compose-pg-cy-quick.yml up -d + spec: "./scripts/cypress/integration/common/9a_QuickTest.js" + wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js" + wait-on-timeout: 1200 + config-file: scripts/cypress/cypress.json + - name: Upload screenshots + if: always() + uses: actions/upload-artifact@v2 + with: + name: cy-quick-pg-snapshots path: scripts/cypress/screenshots retention-days: 2 # docker: diff --git a/package.json b/package.json index 559c8d471b4..579c3db1738 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "start:api": "cd ./packages/nocodb; npm install; NC_DISABLE_CACHE=true NC_DISABLE_TELE=true npm run watch:run:cypress", "start:xcdb-api": "cd ./packages/nocodb; npm install; NC_DISABLE_CACHE=true NC_DISABLE_TELE=true NC_INFLECTION=camelize DATABASE_URL=sqlite:../../../scripts/cypress/fixtures/sqlite-sakila/sakila.db npm run watch:run:cypress", "start:api:cache": "cd ./packages/nocodb; npm install; NC_DISABLE_TELE=true npm run watch:run:cypress", + "start:api:cache:pg": "cd ./packages/nocodb; npm install; NC_DISABLE_TELE=true npm run watch:run:cypress:pg", "start:xcdb-api:cache": "cd ./packages/nocodb; npm install; NC_DISABLE_TELE=true NC_INFLECTION=camelize DATABASE_URL=sqlite:../../../scripts/cypress/fixtures/sqlite-sakila/sakila.db npm run watch:run:cypress", "start:web": "cd ./packages/nc-gui; npm install; npm run dev", "cypress:run": "cypress run --config-file ./scripts/cypress/cypress.json", diff --git a/packages/nocodb/package.json b/packages/nocodb/package.json index 891d2d7b0cd..663df7e7ad0 100644 --- a/packages/nocodb/package.json +++ b/packages/nocodb/package.json @@ -69,6 +69,7 @@ "watch:serve": "nodemon -e ts -w ./build -x npm run debug-local ", "watch:run": "cross-env NC_DISABLE_TELE1=true EE=true nodemon -e ts,js -w ./src -x \"ts-node src/run/docker --log-error --project tsconfig.json\"", "watch:run:cypress": "cross-env EE=true nodemon -e ts,js -w ./src -x \"ts-node src/run/docker --log-error --project tsconfig.json\"", + "watch:run:cypress:pg": "cross-env EE=true nodemon -e ts,js -w ./src -x \"ts-node src/run/dockerRunPG --log-error --project tsconfig.json\"", "watch:run:mysql": "cross-env NC_DISABLE_TELE=true EE=true nodemon -e ts,js -w ./src -x \"ts-node src/run/dockerRunMysql --log-error --project tsconfig.json\"", "watch:run:pg": "cross-env NC_DISABLE_TELE=true EE=true nodemon -e ts,js -w ./src -x \"ts-node src/run/dockerRunPG --log-error --project tsconfig.json\"", "run": "ts-node src/run/docker", diff --git a/packages/nocodb/tests/pg-cy-quick/01-cy-quick.sql b/packages/nocodb/tests/pg-cy-quick/01-cy-quick.sql new file mode 100644 index 00000000000..d71eaf7f3b5 --- /dev/null +++ b/packages/nocodb/tests/pg-cy-quick/01-cy-quick.sql @@ -0,0 +1,4759 @@ +-- +-- PostgreSQL database cluster dump +-- + +SET default_transaction_read_only = off; + +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; + +ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD 'md532e12f215ba27cb750c9e093ce4b5127'; + +-- +-- Database creation +-- + +CREATE DATABASE meta_v2_2022_06_13 WITH TEMPLATE = template0 OWNER = postgres; +REVOKE CONNECT,TEMPORARY ON DATABASE template1 FROM PUBLIC; +GRANT CONNECT ON DATABASE template1 TO PUBLIC; + + +\connect meta_v2_2022_06_13 + +SET default_transaction_read_only = off; + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 9.6.24 +-- Dumped by pg_dump version 9.6.24 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; + + +-- +-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; + + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: nc_acl; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_acl ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255) DEFAULT 'db'::character varying, + tn character varying(255), + acl text, + type character varying(255) DEFAULT 'table'::character varying, + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_acl OWNER TO postgres; + +-- +-- Name: nc_acl_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_acl_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_acl_id_seq OWNER TO postgres; + +-- +-- Name: nc_acl_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_acl_id_seq OWNED BY public.nc_acl.id; + + +-- +-- Name: nc_api_tokens; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_api_tokens ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255), + description character varying(255), + permissions text, + token text, + expiry character varying(255), + enabled boolean DEFAULT true, + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_api_tokens OWNER TO postgres; + +-- +-- Name: nc_api_tokens_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_api_tokens_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_api_tokens_id_seq OWNER TO postgres; + +-- +-- Name: nc_api_tokens_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_api_tokens_id_seq OWNED BY public.nc_api_tokens.id; + + +-- +-- Name: nc_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_audit ( + id integer NOT NULL, + "user" character varying(255), + ip character varying(255), + project_id character varying(255), + db_alias character varying(255), + model_name character varying(100), + model_id character varying(100), + op_type character varying(255), + op_sub_type character varying(255), + status character varying(255), + description text, + details text, + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_audit OWNER TO postgres; + +-- +-- Name: nc_audit_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_audit_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_audit_id_seq OWNER TO postgres; + +-- +-- Name: nc_audit_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_audit_id_seq OWNED BY public.nc_audit.id; + + +-- +-- Name: nc_audit_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_audit_v2 ( + id character varying(20) NOT NULL, + "user" character varying(255), + ip character varying(255), + base_id character varying(20), + project_id character varying(128), + fk_model_id character varying(20), + row_id character varying(255), + op_type character varying(255), + op_sub_type character varying(255), + status character varying(255), + description text, + details text, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_audit_v2 OWNER TO postgres; + +-- +-- Name: nc_bases_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_bases_v2 ( + id character varying(20) NOT NULL, + project_id character varying(128), + alias character varying(255), + config text, + meta text, + is_meta boolean, + type character varying(255), + inflection_column character varying(255), + inflection_table character varying(255), + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_bases_v2 OWNER TO postgres; + +-- +-- Name: nc_col_formula_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_col_formula_v2 ( + id character varying(20) NOT NULL, + fk_column_id character varying(20), + formula text NOT NULL, + formula_raw text, + error text, + deleted boolean, + "order" real, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_col_formula_v2 OWNER TO postgres; + +-- +-- Name: nc_col_lookup_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_col_lookup_v2 ( + id character varying(20) NOT NULL, + fk_column_id character varying(20), + fk_relation_column_id character varying(20), + fk_lookup_column_id character varying(20), + deleted boolean, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_col_lookup_v2 OWNER TO postgres; + +-- +-- Name: nc_col_relations_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_col_relations_v2 ( + id character varying(20) NOT NULL, + ref_db_alias character varying(255), + type character varying(255), + virtual boolean, + db_type character varying(255), + fk_column_id character varying(20), + fk_related_model_id character varying(20), + fk_child_column_id character varying(20), + fk_parent_column_id character varying(20), + fk_mm_model_id character varying(20), + fk_mm_child_column_id character varying(20), + fk_mm_parent_column_id character varying(20), + ur character varying(255), + dr character varying(255), + fk_index_name character varying(255), + deleted boolean, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_col_relations_v2 OWNER TO postgres; + +-- +-- Name: nc_col_rollup_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_col_rollup_v2 ( + id character varying(20) NOT NULL, + fk_column_id character varying(20), + fk_relation_column_id character varying(20), + fk_rollup_column_id character varying(20), + rollup_function character varying(255), + deleted boolean, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_col_rollup_v2 OWNER TO postgres; + +-- +-- Name: nc_col_select_options_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_col_select_options_v2 ( + id character varying(20) NOT NULL, + fk_column_id character varying(20), + title character varying(255), + color character varying(255), + "order" real, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_col_select_options_v2 OWNER TO postgres; + +-- +-- Name: nc_columns_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_columns_v2 ( + id character varying(20) NOT NULL, + base_id character varying(20), + project_id character varying(128), + fk_model_id character varying(20), + title character varying(255), + column_name character varying(255), + uidt character varying(255), + dt character varying(255), + np character varying(255), + ns character varying(255), + clen character varying(255), + cop character varying(255), + pk boolean, + pv boolean, + rqd boolean, + un boolean, + ct text, + ai boolean, + "unique" boolean, + cdf text, + cc text, + csn character varying(255), + dtx character varying(255), + dtxp text, + dtxs character varying(255), + au boolean, + validate text, + virtual boolean, + deleted boolean, + system boolean DEFAULT false, + "order" real, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + meta text +); + + +ALTER TABLE public.nc_columns_v2 OWNER TO postgres; + +-- +-- Name: nc_cron; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_cron ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255) DEFAULT 'db'::character varying, + title character varying(255), + description character varying(255), + env character varying(255), + pattern character varying(255), + webhook character varying(255), + timezone character varying(255) DEFAULT 'America/Los_Angeles'::character varying, + active boolean DEFAULT true, + cron_handler text, + payload text, + headers text, + retries integer DEFAULT 0, + retry_interval integer DEFAULT 60000, + timeout integer DEFAULT 60000, + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_cron OWNER TO postgres; + +-- +-- Name: nc_cron_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_cron_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_cron_id_seq OWNER TO postgres; + +-- +-- Name: nc_cron_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_cron_id_seq OWNED BY public.nc_cron.id; + + +-- +-- Name: nc_disabled_models_for_role; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_disabled_models_for_role ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(45), + title character varying(45), + type character varying(45), + role character varying(45), + disabled boolean DEFAULT true, + tn character varying(255), + rtn character varying(255), + cn character varying(255), + rcn character varying(255), + relation_type character varying(255), + created_at timestamp with time zone, + updated_at timestamp with time zone, + parent_model_title character varying(255) +); + + +ALTER TABLE public.nc_disabled_models_for_role OWNER TO postgres; + +-- +-- Name: nc_disabled_models_for_role_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_disabled_models_for_role_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_disabled_models_for_role_id_seq OWNER TO postgres; + +-- +-- Name: nc_disabled_models_for_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_disabled_models_for_role_id_seq OWNED BY public.nc_disabled_models_for_role.id; + + +-- +-- Name: nc_disabled_models_for_role_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_disabled_models_for_role_v2 ( + id character varying(20) NOT NULL, + base_id character varying(20), + project_id character varying(128), + fk_view_id character varying(20), + role character varying(45), + disabled boolean DEFAULT true, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_disabled_models_for_role_v2 OWNER TO postgres; + +-- +-- Name: nc_evolutions; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_evolutions ( + id integer NOT NULL, + title character varying(255) NOT NULL, + "titleDown" character varying(255), + description character varying(255), + batch integer, + checksum character varying(255), + status integer, + created timestamp with time zone, + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_evolutions OWNER TO postgres; + +-- +-- Name: nc_evolutions_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_evolutions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_evolutions_id_seq OWNER TO postgres; + +-- +-- Name: nc_evolutions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_evolutions_id_seq OWNED BY public.nc_evolutions.id; + + +-- +-- Name: nc_filter_exp_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_filter_exp_v2 ( + id character varying(20) NOT NULL, + base_id character varying(20), + project_id character varying(128), + fk_view_id character varying(20), + fk_hook_id character varying(20), + fk_column_id character varying(20), + fk_parent_id character varying(20), + logical_op character varying(255), + comparison_op character varying(255), + value character varying(255), + is_group boolean, + "order" real, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_filter_exp_v2 OWNER TO postgres; + +-- +-- Name: nc_form_view_columns_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_form_view_columns_v2 ( + id character varying(20) NOT NULL, + base_id character varying(20), + project_id character varying(128), + fk_view_id character varying(20), + fk_column_id character varying(20), + uuid character varying(255), + label character varying(255), + help character varying(255), + description text, + required boolean, + show boolean, + "order" real, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_form_view_columns_v2 OWNER TO postgres; + +-- +-- Name: nc_form_view_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_form_view_v2 ( + base_id character varying(20), + project_id character varying(128), + fk_view_id character varying(20) NOT NULL, + heading character varying(255), + subheading character varying(255), + success_msg text, + redirect_url text, + redirect_after_secs character varying(255), + email character varying(255), + submit_another_form boolean, + show_blank_form boolean, + uuid character varying(255), + banner_image_url text, + logo_url text, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_form_view_v2 OWNER TO postgres; + +-- +-- Name: nc_gallery_view_columns_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_gallery_view_columns_v2 ( + id character varying(20) NOT NULL, + base_id character varying(20), + project_id character varying(128), + fk_view_id character varying(20), + fk_column_id character varying(20), + uuid character varying(255), + label character varying(255), + help character varying(255), + show boolean, + "order" real, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_gallery_view_columns_v2 OWNER TO postgres; + +-- +-- Name: nc_gallery_view_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_gallery_view_v2 ( + base_id character varying(20), + project_id character varying(128), + fk_view_id character varying(20) NOT NULL, + next_enabled boolean, + prev_enabled boolean, + cover_image_idx integer, + fk_cover_image_col_id character varying(20), + cover_image character varying(255), + restrict_types character varying(255), + restrict_size character varying(255), + restrict_number character varying(255), + public boolean, + dimensions character varying(255), + responsive_columns character varying(255), + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_gallery_view_v2 OWNER TO postgres; + +-- +-- Name: nc_grid_view_columns_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_grid_view_columns_v2 ( + id character varying(20) NOT NULL, + fk_view_id character varying(20), + fk_column_id character varying(20), + base_id character varying(20), + project_id character varying(128), + uuid character varying(255), + label character varying(255), + help character varying(255), + width character varying(255) DEFAULT '200px'::character varying, + show boolean, + "order" real, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_grid_view_columns_v2 OWNER TO postgres; + +-- +-- Name: nc_grid_view_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_grid_view_v2 ( + fk_view_id character varying(20) NOT NULL, + base_id character varying(20), + project_id character varying(128), + uuid character varying(255), + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_grid_view_v2 OWNER TO postgres; + +-- +-- Name: nc_hblt___Actor; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public."nc_hblt___Actor" ( + "Name" text, + "Notes" text, + "Attachments" text, + "Status" text, + "ncRecordId" character varying NOT NULL, + "ncRecordHash" character varying +); + + +ALTER TABLE public."nc_hblt___Actor" OWNER TO postgres; + +-- +-- Name: nc_hblt___Film; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public."nc_hblt___Film" ( + "Name" text, + "Notes" text, + "Attachments" text, + "Status" text, + "Done" boolean, + "Tags" text, + "Date" date, + "Phone" character varying, + "Email" text, + "URL" text, + "Number" numeric, + "Value" numeric, + "Percent" double precision, + "Duration" bigint, + "Rating" smallint, + "ncRecordId" character varying NOT NULL, + "ncRecordHash" character varying +); + + +ALTER TABLE public."nc_hblt___Film" OWNER TO postgres; + +-- +-- Name: nc_hblt___Producer; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public."nc_hblt___Producer" ( + "Name" text, + "Notes" text, + "Attachments" text, + "Status" text, + "ncRecordId" character varying NOT NULL, + "ncRecordHash" character varying, + "nc_hblt___Film_id" character varying +); + + +ALTER TABLE public."nc_hblt___Producer" OWNER TO postgres; + +-- +-- Name: nc_hblt___nc_m2m__9oevq0x2z; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_hblt___nc_m2m__9oevq0x2z ( + table2_id character varying NOT NULL, + table1_id character varying NOT NULL +); + + +ALTER TABLE public.nc_hblt___nc_m2m__9oevq0x2z OWNER TO postgres; + +-- +-- Name: nc_hook_logs_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_hook_logs_v2 ( + id character varying(20) NOT NULL, + base_id character varying(20), + project_id character varying(128), + fk_hook_id character varying(20), + type character varying(255), + event character varying(255), + operation character varying(255), + test_call boolean DEFAULT true, + payload text, + conditions text, + notification text, + error_code character varying(255), + error_message character varying(255), + error text, + execution_time integer, + response character varying(255), + triggered_by character varying(255), + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_hook_logs_v2 OWNER TO postgres; + +-- +-- Name: nc_hooks; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_hooks ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255) DEFAULT 'db'::character varying, + title character varying(255), + description character varying(255), + env character varying(255) DEFAULT 'all'::character varying, + tn character varying(255), + type character varying(255), + event character varying(255), + operation character varying(255), + async boolean DEFAULT false, + payload boolean DEFAULT true, + url text, + headers text, + condition text, + notification text, + retries integer DEFAULT 0, + retry_interval integer DEFAULT 60000, + timeout integer DEFAULT 60000, + active boolean DEFAULT true, + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_hooks OWNER TO postgres; + +-- +-- Name: nc_hooks_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_hooks_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_hooks_id_seq OWNER TO postgres; + +-- +-- Name: nc_hooks_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_hooks_id_seq OWNED BY public.nc_hooks.id; + + +-- +-- Name: nc_hooks_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_hooks_v2 ( + id character varying(20) NOT NULL, + base_id character varying(20), + project_id character varying(128), + fk_model_id character varying(20), + title character varying(255), + description character varying(255), + env character varying(255) DEFAULT 'all'::character varying, + type character varying(255), + event character varying(255), + operation character varying(255), + async boolean DEFAULT false, + payload boolean DEFAULT true, + url text, + headers text, + condition boolean DEFAULT false, + notification text, + retries integer DEFAULT 0, + retry_interval integer DEFAULT 60000, + timeout integer DEFAULT 60000, + active boolean DEFAULT true, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_hooks_v2 OWNER TO postgres; + +-- +-- Name: nc_kanban_view_columns_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_kanban_view_columns_v2 ( + id character varying(20) NOT NULL, + base_id character varying(20), + project_id character varying(128), + fk_view_id character varying(20), + fk_column_id character varying(20), + uuid character varying(255), + label character varying(255), + help character varying(255), + show boolean, + "order" real, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_kanban_view_columns_v2 OWNER TO postgres; + +-- +-- Name: nc_kanban_view_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_kanban_view_v2 ( + fk_view_id character varying(20) NOT NULL, + base_id character varying(20), + project_id character varying(128), + show boolean, + "order" real, + uuid character varying(255), + title character varying(255), + public boolean, + password character varying(255), + show_all_fields boolean, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_kanban_view_v2 OWNER TO postgres; + +-- +-- Name: nc_loaders; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_loaders ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255) DEFAULT 'db'::character varying, + title character varying(255), + parent character varying(255), + child character varying(255), + relation character varying(255), + resolver character varying(255), + functions text, + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_loaders OWNER TO postgres; + +-- +-- Name: nc_loaders_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_loaders_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_loaders_id_seq OWNER TO postgres; + +-- +-- Name: nc_loaders_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_loaders_id_seq OWNED BY public.nc_loaders.id; + + +-- +-- Name: nc_migrations; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_migrations ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255), + up text, + down text, + title character varying(255) NOT NULL, + title_down character varying(255), + description character varying(255), + batch integer, + checksum character varying(255), + status integer, + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_migrations OWNER TO postgres; + +-- +-- Name: nc_migrations_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_migrations_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_migrations_id_seq OWNER TO postgres; + +-- +-- Name: nc_migrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_migrations_id_seq OWNED BY public.nc_migrations.id; + + +-- +-- Name: nc_models; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_models ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255) DEFAULT 'db'::character varying, + title character varying(255), + alias character varying(255), + type character varying(255) DEFAULT 'table'::character varying, + meta text, + schema text, + schema_previous text, + services text, + messages text, + enabled boolean DEFAULT true, + parent_model_title character varying(255), + show_as character varying(255) DEFAULT 'table'::character varying, + query_params text, + list_idx integer, + tags character varying(255), + pinned boolean, + created_at timestamp with time zone, + updated_at timestamp with time zone, + mm integer, + m_to_m_meta text, + "order" real, + view_order real +); + + +ALTER TABLE public.nc_models OWNER TO postgres; + +-- +-- Name: nc_models_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_models_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_models_id_seq OWNER TO postgres; + +-- +-- Name: nc_models_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_models_id_seq OWNED BY public.nc_models.id; + + +-- +-- Name: nc_models_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_models_v2 ( + id character varying(20) NOT NULL, + base_id character varying(20), + project_id character varying(128), + table_name character varying(255), + title character varying(255), + type character varying(255) DEFAULT 'table'::character varying, + meta text, + schema text, + enabled boolean DEFAULT true, + mm boolean DEFAULT false, + tags character varying(255), + pinned boolean, + deleted boolean, + "order" real, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_models_v2 OWNER TO postgres; + +-- +-- Name: nc_orgs_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_orgs_v2 ( + id character varying(20) NOT NULL, + title character varying(255), + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_orgs_v2 OWNER TO postgres; + +-- +-- Name: nc_plugins; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_plugins ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255), + title character varying(45), + description text, + active boolean DEFAULT false, + rating real, + version character varying(255), + docs character varying(255), + status character varying(255) DEFAULT 'install'::character varying, + status_details character varying(255), + logo character varying(255), + icon character varying(255), + tags character varying(255), + category character varying(255), + input_schema text, + input text, + creator character varying(255), + creator_website character varying(255), + price character varying(255), + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_plugins OWNER TO postgres; + +-- +-- Name: nc_plugins_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_plugins_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_plugins_id_seq OWNER TO postgres; + +-- +-- Name: nc_plugins_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_plugins_id_seq OWNED BY public.nc_plugins.id; + + +-- +-- Name: nc_plugins_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_plugins_v2 ( + id character varying(20) NOT NULL, + title character varying(45), + description text, + active boolean DEFAULT false, + rating real, + version character varying(255), + docs character varying(255), + status character varying(255) DEFAULT 'install'::character varying, + status_details character varying(255), + logo character varying(255), + icon character varying(255), + tags character varying(255), + category character varying(255), + input_schema text, + input text, + creator character varying(255), + creator_website character varying(255), + price character varying(255), + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_plugins_v2 OWNER TO postgres; + +-- +-- Name: nc_project_users_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_project_users_v2 ( + project_id character varying(128), + fk_user_id character varying(20), + roles text, + starred boolean, + pinned boolean, + "group" character varying(255), + color character varying(255), + "order" real, + hidden real, + opened_date timestamp with time zone, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_project_users_v2 OWNER TO postgres; + +-- +-- Name: nc_projects; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_projects ( + id character varying(128) NOT NULL, + title character varying(255), + status character varying(255), + description text, + config text, + meta text, + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_projects OWNER TO postgres; + +-- +-- Name: nc_projects_users; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_projects_users ( + project_id character varying(255), + user_id integer, + roles text, + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_projects_users OWNER TO postgres; + +-- +-- Name: nc_projects_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_projects_v2 ( + id character varying(128) NOT NULL, + title character varying(255), + prefix character varying(255), + status character varying(255), + description text, + meta text, + color character varying(255), + uuid character varying(255), + password character varying(255), + roles character varying(255), + deleted boolean DEFAULT false, + is_meta boolean, + "order" real, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_projects_v2 OWNER TO postgres; + +-- +-- Name: nc_relations; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_relations ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255), + tn character varying(255), + rtn character varying(255), + _tn character varying(255), + _rtn character varying(255), + cn character varying(255), + rcn character varying(255), + _cn character varying(255), + _rcn character varying(255), + referenced_db_alias character varying(255), + type character varying(255), + db_type character varying(255), + ur character varying(255), + dr character varying(255), + created_at timestamp with time zone, + updated_at timestamp with time zone, + fkn character varying(255) +); + + +ALTER TABLE public.nc_relations OWNER TO postgres; + +-- +-- Name: nc_relations_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_relations_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_relations_id_seq OWNER TO postgres; + +-- +-- Name: nc_relations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_relations_id_seq OWNED BY public.nc_relations.id; + + +-- +-- Name: nc_resolvers; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_resolvers ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255) DEFAULT 'db'::character varying, + title character varying(255), + resolver text, + type character varying(255), + acl text, + functions text, + handler_type integer DEFAULT 1, + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_resolvers OWNER TO postgres; + +-- +-- Name: nc_resolvers_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_resolvers_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_resolvers_id_seq OWNER TO postgres; + +-- +-- Name: nc_resolvers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_resolvers_id_seq OWNED BY public.nc_resolvers.id; + + +-- +-- Name: nc_roles; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_roles ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255) DEFAULT 'db'::character varying, + title character varying(255), + type character varying(255) DEFAULT 'CUSTOM'::character varying, + description character varying(255), + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_roles OWNER TO postgres; + +-- +-- Name: nc_roles_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_roles_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_roles_id_seq OWNER TO postgres; + +-- +-- Name: nc_roles_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_roles_id_seq OWNED BY public.nc_roles.id; + + +-- +-- Name: nc_routes; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_routes ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255) DEFAULT 'db'::character varying, + title character varying(255), + tn character varying(255), + tnp character varying(255), + tnc character varying(255), + relation_type character varying(255), + path text, + type character varying(255), + handler text, + acl text, + "order" integer, + functions text, + handler_type integer DEFAULT 1, + is_custom boolean, + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_routes OWNER TO postgres; + +-- +-- Name: nc_routes_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_routes_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_routes_id_seq OWNER TO postgres; + +-- +-- Name: nc_routes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_routes_id_seq OWNED BY public.nc_routes.id; + + +-- +-- Name: nc_rpc; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_rpc ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255) DEFAULT 'db'::character varying, + title character varying(255), + tn character varying(255), + service text, + tnp character varying(255), + tnc character varying(255), + relation_type character varying(255), + "order" integer, + type character varying(255), + acl text, + functions text, + handler_type integer DEFAULT 1, + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_rpc OWNER TO postgres; + +-- +-- Name: nc_rpc_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_rpc_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_rpc_id_seq OWNER TO postgres; + +-- +-- Name: nc_rpc_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_rpc_id_seq OWNED BY public.nc_rpc.id; + + +-- +-- Name: nc_shared_bases; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_shared_bases ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255), + roles character varying(255) DEFAULT 'viewer'::character varying, + shared_base_id character varying(255), + enabled boolean DEFAULT true, + password character varying(255), + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_shared_bases OWNER TO postgres; + +-- +-- Name: nc_shared_bases_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_shared_bases_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_shared_bases_id_seq OWNER TO postgres; + +-- +-- Name: nc_shared_bases_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_shared_bases_id_seq OWNED BY public.nc_shared_bases.id; + + +-- +-- Name: nc_shared_views; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_shared_views ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255), + model_name character varying(255), + meta text, + query_params text, + view_id character varying(255), + show_all_fields boolean, + allow_copy boolean, + password character varying(255), + created_at timestamp with time zone, + updated_at timestamp with time zone, + view_type character varying(255), + view_name character varying(255) +); + + +ALTER TABLE public.nc_shared_views OWNER TO postgres; + +-- +-- Name: nc_shared_views_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_shared_views_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_shared_views_id_seq OWNER TO postgres; + +-- +-- Name: nc_shared_views_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_shared_views_id_seq OWNED BY public.nc_shared_views.id; + + +-- +-- Name: nc_shared_views_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_shared_views_v2 ( + id character varying(20) NOT NULL, + fk_view_id character varying(20), + meta text, + query_params text, + view_id character varying(255), + show_all_fields boolean, + allow_copy boolean, + password character varying(255), + deleted boolean, + "order" real, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_shared_views_v2 OWNER TO postgres; + +-- +-- Name: nc_sort_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_sort_v2 ( + id character varying(20) NOT NULL, + base_id character varying(20), + project_id character varying(128), + fk_view_id character varying(20), + fk_column_id character varying(20), + direction character varying(255) DEFAULT 'false'::character varying, + "order" real, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_sort_v2 OWNER TO postgres; + +-- +-- Name: nc_store; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_store ( + id integer NOT NULL, + project_id character varying(255), + db_alias character varying(255) DEFAULT 'db'::character varying, + key character varying(255), + value text, + type character varying(255), + env character varying(255), + tag character varying(255), + created_at timestamp with time zone, + updated_at timestamp with time zone +); + + +ALTER TABLE public.nc_store OWNER TO postgres; + +-- +-- Name: nc_store_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.nc_store_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.nc_store_id_seq OWNER TO postgres; + +-- +-- Name: nc_store_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.nc_store_id_seq OWNED BY public.nc_store.id; + + +-- +-- Name: nc_sync_logs_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_sync_logs_v2 ( + id character varying(20) NOT NULL, + project_id character varying(128), + fk_sync_source_id character varying(20), + time_taken integer, + status character varying(255), + status_details text, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_sync_logs_v2 OWNER TO postgres; + +-- +-- Name: nc_sync_source_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_sync_source_v2 ( + id character varying(20) NOT NULL, + title character varying(255), + type character varying(255), + details text, + deleted boolean, + enabled boolean DEFAULT true, + "order" real, + project_id character varying(128), + fk_user_id character varying(128), + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_sync_source_v2 OWNER TO postgres; + +-- +-- Name: nc_team_users_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_team_users_v2 ( + org_id character varying(20), + user_id character varying(20), + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_team_users_v2 OWNER TO postgres; + +-- +-- Name: nc_teams_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_teams_v2 ( + id character varying(20) NOT NULL, + title character varying(255), + org_id character varying(20), + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_teams_v2 OWNER TO postgres; + +-- +-- Name: nc_users_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_users_v2 ( + id character varying(20) NOT NULL, + email character varying(255), + password character varying(255), + salt character varying(255), + firstname character varying(255), + lastname character varying(255), + username character varying(255), + refresh_token character varying(255), + invite_token character varying(255), + invite_token_expires character varying(255), + reset_password_expires timestamp with time zone, + reset_password_token character varying(255), + email_verification_token character varying(255), + email_verified boolean, + roles character varying(255) DEFAULT 'editor'::character varying, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_users_v2 OWNER TO postgres; + +-- +-- Name: nc_views_v2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.nc_views_v2 ( + id character varying(20) NOT NULL, + base_id character varying(20), + project_id character varying(128), + fk_model_id character varying(20), + title character varying(255), + type integer, + is_default boolean, + show_system_fields boolean, + lock_type character varying(255) DEFAULT 'collaborative'::character varying, + uuid character varying(255), + password character varying(255), + show boolean, + "order" real, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.nc_views_v2 OWNER TO postgres; + +-- +-- Name: xc_knex_migrations; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.xc_knex_migrations ( + id integer NOT NULL, + name character varying(255), + batch integer, + migration_time timestamp with time zone +); + + +ALTER TABLE public.xc_knex_migrations OWNER TO postgres; + +-- +-- Name: xc_knex_migrations_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.xc_knex_migrations_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.xc_knex_migrations_id_seq OWNER TO postgres; + +-- +-- Name: xc_knex_migrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.xc_knex_migrations_id_seq OWNED BY public.xc_knex_migrations.id; + + +-- +-- Name: xc_knex_migrations_lock; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.xc_knex_migrations_lock ( + index integer NOT NULL, + is_locked integer +); + + +ALTER TABLE public.xc_knex_migrations_lock OWNER TO postgres; + +-- +-- Name: xc_knex_migrations_lock_index_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.xc_knex_migrations_lock_index_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.xc_knex_migrations_lock_index_seq OWNER TO postgres; + +-- +-- Name: xc_knex_migrations_lock_index_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.xc_knex_migrations_lock_index_seq OWNED BY public.xc_knex_migrations_lock.index; + + +-- +-- Name: xc_knex_migrationsv2; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.xc_knex_migrationsv2 ( + id integer NOT NULL, + name character varying(255), + batch integer, + migration_time timestamp with time zone +); + + +ALTER TABLE public.xc_knex_migrationsv2 OWNER TO postgres; + +-- +-- Name: xc_knex_migrationsv2_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.xc_knex_migrationsv2_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.xc_knex_migrationsv2_id_seq OWNER TO postgres; + +-- +-- Name: xc_knex_migrationsv2_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.xc_knex_migrationsv2_id_seq OWNED BY public.xc_knex_migrationsv2.id; + + +-- +-- Name: xc_knex_migrationsv2_lock; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.xc_knex_migrationsv2_lock ( + index integer NOT NULL, + is_locked integer +); + + +ALTER TABLE public.xc_knex_migrationsv2_lock OWNER TO postgres; + +-- +-- Name: xc_knex_migrationsv2_lock_index_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.xc_knex_migrationsv2_lock_index_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.xc_knex_migrationsv2_lock_index_seq OWNER TO postgres; + +-- +-- Name: xc_knex_migrationsv2_lock_index_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.xc_knex_migrationsv2_lock_index_seq OWNED BY public.xc_knex_migrationsv2_lock.index; + + +-- +-- Name: nc_acl id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_acl ALTER COLUMN id SET DEFAULT nextval('public.nc_acl_id_seq'::regclass); + + +-- +-- Name: nc_api_tokens id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_api_tokens ALTER COLUMN id SET DEFAULT nextval('public.nc_api_tokens_id_seq'::regclass); + + +-- +-- Name: nc_audit id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_audit ALTER COLUMN id SET DEFAULT nextval('public.nc_audit_id_seq'::regclass); + + +-- +-- Name: nc_cron id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_cron ALTER COLUMN id SET DEFAULT nextval('public.nc_cron_id_seq'::regclass); + + +-- +-- Name: nc_disabled_models_for_role id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_disabled_models_for_role ALTER COLUMN id SET DEFAULT nextval('public.nc_disabled_models_for_role_id_seq'::regclass); + + +-- +-- Name: nc_evolutions id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_evolutions ALTER COLUMN id SET DEFAULT nextval('public.nc_evolutions_id_seq'::regclass); + + +-- +-- Name: nc_hooks id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_hooks ALTER COLUMN id SET DEFAULT nextval('public.nc_hooks_id_seq'::regclass); + + +-- +-- Name: nc_loaders id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_loaders ALTER COLUMN id SET DEFAULT nextval('public.nc_loaders_id_seq'::regclass); + + +-- +-- Name: nc_migrations id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_migrations ALTER COLUMN id SET DEFAULT nextval('public.nc_migrations_id_seq'::regclass); + + +-- +-- Name: nc_models id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_models ALTER COLUMN id SET DEFAULT nextval('public.nc_models_id_seq'::regclass); + + +-- +-- Name: nc_plugins id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_plugins ALTER COLUMN id SET DEFAULT nextval('public.nc_plugins_id_seq'::regclass); + + +-- +-- Name: nc_relations id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_relations ALTER COLUMN id SET DEFAULT nextval('public.nc_relations_id_seq'::regclass); + + +-- +-- Name: nc_resolvers id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_resolvers ALTER COLUMN id SET DEFAULT nextval('public.nc_resolvers_id_seq'::regclass); + + +-- +-- Name: nc_roles id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_roles ALTER COLUMN id SET DEFAULT nextval('public.nc_roles_id_seq'::regclass); + + +-- +-- Name: nc_routes id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_routes ALTER COLUMN id SET DEFAULT nextval('public.nc_routes_id_seq'::regclass); + + +-- +-- Name: nc_rpc id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_rpc ALTER COLUMN id SET DEFAULT nextval('public.nc_rpc_id_seq'::regclass); + + +-- +-- Name: nc_shared_bases id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_shared_bases ALTER COLUMN id SET DEFAULT nextval('public.nc_shared_bases_id_seq'::regclass); + + +-- +-- Name: nc_shared_views id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_shared_views ALTER COLUMN id SET DEFAULT nextval('public.nc_shared_views_id_seq'::regclass); + + +-- +-- Name: nc_store id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_store ALTER COLUMN id SET DEFAULT nextval('public.nc_store_id_seq'::regclass); + + +-- +-- Name: xc_knex_migrations id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.xc_knex_migrations ALTER COLUMN id SET DEFAULT nextval('public.xc_knex_migrations_id_seq'::regclass); + + +-- +-- Name: xc_knex_migrations_lock index; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.xc_knex_migrations_lock ALTER COLUMN index SET DEFAULT nextval('public.xc_knex_migrations_lock_index_seq'::regclass); + + +-- +-- Name: xc_knex_migrationsv2 id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.xc_knex_migrationsv2 ALTER COLUMN id SET DEFAULT nextval('public.xc_knex_migrationsv2_id_seq'::regclass); + + +-- +-- Name: xc_knex_migrationsv2_lock index; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.xc_knex_migrationsv2_lock ALTER COLUMN index SET DEFAULT nextval('public.xc_knex_migrationsv2_lock_index_seq'::regclass); + + +-- +-- Data for Name: nc_acl; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_acl (id, project_id, db_alias, tn, acl, type, created_at, updated_at) FROM stdin; +\. + + +-- +-- Name: nc_acl_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_acl_id_seq', 1, false); + + +-- +-- Data for Name: nc_api_tokens; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_api_tokens (id, project_id, db_alias, description, permissions, token, expiry, enabled, created_at, updated_at) FROM stdin; +\. + + +-- +-- Name: nc_api_tokens_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_api_tokens_id_seq', 1, false); + + +-- +-- Data for Name: nc_audit; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_audit (id, "user", ip, project_id, db_alias, model_name, model_id, op_type, op_sub_type, status, description, details, created_at, updated_at) FROM stdin; +\. + + +-- +-- Name: nc_audit_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_audit_id_seq', 1, false); + + +-- +-- Data for Name: nc_audit_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_audit_v2 (id, "user", ip, base_id, project_id, fk_model_id, row_id, op_type, op_sub_type, status, description, details, created_at, updated_at) FROM stdin; +adt_v5waji0khmfgba user@nocodb.com ::1 \N \N \N \N AUTHENTICATION SIGNUP \N signed up \N 2022-06-13 07:00:15.9225+00 2022-06-13 07:00:15.9225+00 +adt_sfg8mbyzkp24k5 user@nocodb.com ::ffff:127.0.0.1 \N p_99s02mvqpc2j14 \N \N TABLE CREATED \N created table nc_hblt___Film with alias Film \N 2022-06-13 07:00:46.465699+00 2022-06-13 07:00:46.465699+00 +adt_w3jc9jajn2w0e1 user@nocodb.com ::ffff:127.0.0.1 \N p_99s02mvqpc2j14 \N \N TABLE CREATED \N created table nc_hblt___Actor with alias Actor \N 2022-06-13 07:00:46.75746+00 2022-06-13 07:00:46.75746+00 +adt_4sd982cktz71y1 user@nocodb.com ::ffff:127.0.0.1 \N p_99s02mvqpc2j14 \N \N TABLE CREATED \N created table nc_hblt___Producer with alias Producer \N 2022-06-13 07:00:46.878618+00 2022-06-13 07:00:46.878618+00 +adt_5y0l9swcmnf71j user@nocodb.com ::ffff:127.0.0.1 \N p_99s02mvqpc2j14 \N \N TABLE_COLUMN CREATED \N created column Actor with alias Actor from table nc_hblt___Film \N 2022-06-13 07:00:47.101199+00 2022-06-13 07:00:47.101199+00 +adt_deset50120k2mb user@nocodb.com ::ffff:127.0.0.1 \N p_99s02mvqpc2j14 \N \N TABLE_COLUMN UPDATED \N updated column null with alias ActorMMList from table nc_hblt___Actor \N 2022-06-13 07:00:47.118773+00 2022-06-13 07:00:47.118773+00 +adt_nmhmxmf2tz09ta user@nocodb.com ::ffff:127.0.0.1 \N p_99s02mvqpc2j14 \N \N TABLE_COLUMN CREATED \N created column Status_from_Actor_ with alias Status (from Actor) from table nc_hblt___Film \N 2022-06-13 07:00:47.138869+00 2022-06-13 07:00:47.138869+00 +adt_gyu32oew8ys4gt user@nocodb.com ::ffff:127.0.0.1 \N p_99s02mvqpc2j14 \N \N AUTHENTICATION INVITE \N invited raju.us@gmail.com to p_99s02mvqpc2j14 project \N 2022-06-13 07:00:47.185359+00 2022-06-13 07:00:47.185359+00 +adt_nnlk3y4njb5i5r user@nocodb.com ::ffff:127.0.0.1 \N p_99s02mvqpc2j14 \N \N AUTHENTICATION INVITE \N invited sivadstala@gmail.com to p_99s02mvqpc2j14 project \N 2022-06-13 07:00:47.185628+00 2022-06-13 07:00:47.185628+00 +adt_2paadwym0m71wt user@nocodb.com ::1 \N p_99s02mvqpc2j14 \N \N TABLE_COLUMN CREATED \N created column undefined with alias Producer from table nc_hblt___Film \N 2022-06-13 07:03:47.605045+00 2022-06-13 07:03:47.605045+00 +adt_u1f6tm5zee2io2 user@nocodb.com ::ffff:127.0.0.1 \N \N \N \N AUTHENTICATION SIGNIN \N signed in \N 2022-06-13 07:07:13.707056+00 2022-06-13 07:07:13.707056+00 +adt_pkglidap0qs03a user@nocodb.com ::1 \N p_99s02mvqpc2j14 \N \N TABLE_COLUMN CREATED \N created column undefined with alias RollUp from table nc_hblt___Film \N 2022-06-13 07:12:16.764517+00 2022-06-13 07:12:16.764517+00 +adt_9rvo9igddeph9z user@nocodb.com ::1 \N \N \N \N AUTHENTICATION SIGNIN \N signed in \N 2022-06-13 07:17:35.308386+00 2022-06-13 07:17:35.308386+00 +adt_ac9rhai3qyu5lv user@nocodb.com ::1 \N p_99s02mvqpc2j14 \N \N TABLE_COLUMN CREATED \N created column undefined with alias Computation from table nc_hblt___Film \N 2022-06-13 07:18:06.454646+00 2022-06-13 07:18:06.454646+00 +adt_104tk1g0hskxt4 user@nocodb.com ::ffff:127.0.0.1 \N \N \N \N AUTHENTICATION SIGNIN \N signed in \N 2022-06-13 07:19:45.966163+00 2022-06-13 07:19:45.966163+00 +\. + + +-- +-- Data for Name: nc_bases_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_bases_v2 (id, project_id, alias, config, meta, is_meta, type, inflection_column, inflection_table, created_at, updated_at) FROM stdin; +ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N U2FsdGVkX1/+hnc/aEFWo55Jj1S6TZ9OFUF+g/2FONQ= \N t pg camelize camelize 2022-06-13 07:00:19.416618+00 2022-06-13 07:00:19.416618+00 +\. + + +-- +-- Data for Name: nc_col_formula_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_col_formula_v2 (id, fk_column_id, formula, formula_raw, error, deleted, "order", created_at, updated_at) FROM stdin; +fm_q5ayma8om5h9ey cl_cvxw412ltg7f82 ((ADD({{cl_qgvbuwq5wlbkha}}, {{cl_bysnatbas68gpj}}) * 100) / 25) ((ADD({Number}, {Percent}) * 100) / 25) \N \N \N 2022-06-13 07:18:06.417753+00 2022-06-13 07:18:06.417753+00 +\. + + +-- +-- Data for Name: nc_col_lookup_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_col_lookup_v2 (id, fk_column_id, fk_relation_column_id, fk_lookup_column_id, deleted, created_at, updated_at) FROM stdin; +lk_66wkopfigs6pl3 cl_pwko7vmwjem98l cl_rwe408zcovemvg cl_wryamwhwnbigwz \N 2022-06-13 07:00:47.129247+00 2022-06-13 07:00:47.129247+00 +\. + + +-- +-- Data for Name: nc_col_relations_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_col_relations_v2 (id, ref_db_alias, type, virtual, db_type, fk_column_id, fk_related_model_id, fk_child_column_id, fk_parent_column_id, fk_mm_model_id, fk_mm_child_column_id, fk_mm_parent_column_id, ur, dr, fk_index_name, deleted, created_at, updated_at) FROM stdin; +ln_gi7jvurojf01oc \N bt f \N cl_5n7rh5cu5i9a94 md_lh3bakzk8scz7r cl_z8snfz1ltrtflk cl_0fhoikbhmibfic \N \N \N \N \N \N \N 2022-06-13 07:00:47.031022+00 2022-06-13 07:00:47.031022+00 +ln_cvtqcvena4oue7 \N hm f \N cl_vyl6nn9uu4rniw md_affo9e0j69frre cl_z8snfz1ltrtflk cl_0fhoikbhmibfic \N \N \N \N \N \N \N 2022-06-13 07:00:47.042462+00 2022-06-13 07:00:47.042462+00 +ln_gyg6gipe1wfmv2 \N bt f \N cl_6zk113zuqps6am md_w4bsfg7gtmqque cl_47if01uivdzzr1 cl_6lcfkyhon35cvg \N \N \N \N \N \N \N 2022-06-13 07:00:47.05616+00 2022-06-13 07:00:47.05616+00 +ln_qx9xncbtyuhmkp \N hm f \N cl_9rp6davhp63srs md_affo9e0j69frre cl_47if01uivdzzr1 cl_6lcfkyhon35cvg \N \N \N \N \N \N \N 2022-06-13 07:00:47.06587+00 2022-06-13 07:00:47.06587+00 +ln_hkfniks8q62nyr \N mm \N \N cl_dqsqpoma8kd32h md_w4bsfg7gtmqque cl_0fhoikbhmibfic cl_6lcfkyhon35cvg md_affo9e0j69frre cl_z8snfz1ltrtflk cl_47if01uivdzzr1 \N \N \N \N 2022-06-13 07:00:47.077011+00 2022-06-13 07:00:47.077011+00 +ln_hrsdgt2lkyqhzw \N mm \N \N cl_rwe408zcovemvg md_lh3bakzk8scz7r cl_6lcfkyhon35cvg cl_0fhoikbhmibfic md_affo9e0j69frre cl_47if01uivdzzr1 cl_z8snfz1ltrtflk \N \N \N \N 2022-06-13 07:00:47.088114+00 2022-06-13 07:00:47.088114+00 +ln_81momy9qn7rcz0 \N bt f \N cl_0xvph5t8e5b667 md_w4bsfg7gtmqque cl_6ipbhm6pdd136g cl_6lcfkyhon35cvg \N \N \N \N \N \N \N 2022-06-13 07:03:47.466028+00 2022-06-13 07:03:47.466028+00 +ln_734ihvz5jkzpig \N hm f \N cl_bmar4762fidxnd md_ud292ppq36mp14 cl_6ipbhm6pdd136g cl_6lcfkyhon35cvg \N \N \N \N \N \N \N 2022-06-13 07:03:47.577368+00 2022-06-13 07:03:47.577368+00 +\. + + +-- +-- Data for Name: nc_col_rollup_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_col_rollup_v2 (id, fk_column_id, fk_relation_column_id, fk_rollup_column_id, rollup_function, deleted, created_at, updated_at) FROM stdin; +rl_kdfr6q45sl92wh cl_tm7ltwcixu34qm cl_rwe408zcovemvg cl_6h7ixf3wm93jl1 count \N 2022-06-13 07:12:16.736907+00 2022-06-13 07:12:16.736907+00 +\. + + +-- +-- Data for Name: nc_col_select_options_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_col_select_options_v2 (id, fk_column_id, title, color, "order", created_at, updated_at) FROM stdin; +sl_ffxoxb89s2rzx8 cl_vjlucu8q3zjj79 'Todo' \N \N 2022-06-13 07:00:46.518181+00 2022-06-13 07:00:46.518181+00 +sl_q5rpl9dpig9eim cl_vjlucu8q3zjj79 'In progress' \N \N 2022-06-13 07:00:46.520627+00 2022-06-13 07:00:46.520627+00 +sl_1k4wjfoocx7knp cl_vjlucu8q3zjj79 'Done' \N \N 2022-06-13 07:00:46.523057+00 2022-06-13 07:00:46.523057+00 +sl_t3pawrta4itxy6 cl_2qmjsmw5ilkjb1 'Jan' \N \N 2022-06-13 07:00:46.542304+00 2022-06-13 07:00:46.542304+00 +sl_uxtvjlk02bkocs cl_2qmjsmw5ilkjb1 'Feb' \N \N 2022-06-13 07:00:46.545152+00 2022-06-13 07:00:46.545152+00 +sl_6x6kr7uk21wefj cl_2qmjsmw5ilkjb1 'Mar' \N \N 2022-06-13 07:00:46.547407+00 2022-06-13 07:00:46.547407+00 +sl_c0meuqo34mklof cl_2qmjsmw5ilkjb1 'Apr' \N \N 2022-06-13 07:00:46.550584+00 2022-06-13 07:00:46.550584+00 +sl_8s310kjh2haafi cl_2qmjsmw5ilkjb1 'May' \N \N 2022-06-13 07:00:46.555255+00 2022-06-13 07:00:46.555255+00 +sl_n5s3thxynn01m0 cl_2qmjsmw5ilkjb1 'Jun' \N \N 2022-06-13 07:00:46.55856+00 2022-06-13 07:00:46.55856+00 +sl_xcrv4uxat4ks13 cl_2qmjsmw5ilkjb1 'Jul' \N \N 2022-06-13 07:00:46.561484+00 2022-06-13 07:00:46.561484+00 +sl_xdyr2y0lgwhbc3 cl_2qmjsmw5ilkjb1 'Aug' \N \N 2022-06-13 07:00:46.564004+00 2022-06-13 07:00:46.564004+00 +sl_3ifag4o5utixc1 cl_2qmjsmw5ilkjb1 'Sep' \N \N 2022-06-13 07:00:46.566475+00 2022-06-13 07:00:46.566475+00 +sl_raaxgtwx37tkx5 cl_2qmjsmw5ilkjb1 'Oct' \N \N 2022-06-13 07:00:46.569129+00 2022-06-13 07:00:46.569129+00 +sl_oynfjuccyxxzfg cl_2qmjsmw5ilkjb1 'Nov' \N \N 2022-06-13 07:00:46.574885+00 2022-06-13 07:00:46.574885+00 +sl_0q2zhedvohxwku cl_2qmjsmw5ilkjb1 'Dec' \N \N 2022-06-13 07:00:46.577529+00 2022-06-13 07:00:46.577529+00 +sl_wcddtslvkrcu0n cl_wryamwhwnbigwz 'Todo' \N \N 2022-06-13 07:00:46.804292+00 2022-06-13 07:00:46.804292+00 +sl_9n2u1pdfpjwydl cl_wryamwhwnbigwz 'In progress' \N \N 2022-06-13 07:00:46.807194+00 2022-06-13 07:00:46.807194+00 +sl_c8roqi0mfwtrly cl_wryamwhwnbigwz 'Done' \N \N 2022-06-13 07:00:46.812018+00 2022-06-13 07:00:46.812018+00 +sl_yc769l76r6331c cl_9nxx6uy4779nio 'Todo' \N \N 2022-06-13 07:00:46.926807+00 2022-06-13 07:00:46.926807+00 +sl_71lywcglalllza cl_9nxx6uy4779nio 'In progress' \N \N 2022-06-13 07:00:46.92914+00 2022-06-13 07:00:46.92914+00 +sl_e5zng07rdpnuhc cl_9nxx6uy4779nio 'Done' \N \N 2022-06-13 07:00:46.93313+00 2022-06-13 07:00:46.93313+00 +\. + + +-- +-- Data for Name: nc_columns_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_columns_v2 (id, base_id, project_id, fk_model_id, title, column_name, uidt, dt, np, ns, clen, cop, pk, pv, rqd, un, ct, ai, "unique", cdf, cc, csn, dtx, dtxp, dtxs, au, validate, virtual, deleted, system, "order", created_at, updated_at, meta) FROM stdin; +cl_4af04om9pttcix ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Notes Notes LongText text \N \N \N 2 f \N f f \N f \N \N \N \N text \N \N f \N \N \N f 2 2022-06-13 07:00:46.499583+00 2022-06-13 07:00:46.499583+00 \N +cl_wsoajtyx4w8f2h ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Attachments Attachments Attachment text \N \N \N 3 f \N f f \N f \N \N \N \N text \N \N f \N \N \N f 3 2022-06-13 07:00:46.506918+00 2022-06-13 07:00:46.506918+00 \N +cl_vjlucu8q3zjj79 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Status Status SingleSelect text \N \N \N 4 f \N f f \N f \N \N \N \N text 'Todo','In progress','Done' \N f \N \N \N f 4 2022-06-13 07:00:46.514644+00 2022-06-13 07:00:46.514644+00 \N +cl_lfjck1f7baljji ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Done Done Checkbox boolean \N \N \N 5 f \N f f \N f \N \N \N \N boolean \N \N f \N \N \N f 5 2022-06-13 07:00:46.530229+00 2022-06-13 07:00:46.530229+00 \N +cl_2qmjsmw5ilkjb1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Tags Tags MultiSelect text \N \N \N 6 f \N f f \N f \N \N \N \N text 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec' \N f \N \N \N f 6 2022-06-13 07:00:46.538277+00 2022-06-13 07:00:46.538277+00 \N +cl_xa33l1z0bwzc1q ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Date Date Date date \N \N \N 7 f \N f f \N f \N \N \N \N date 0 \N f \N \N \N f 7 2022-06-13 07:00:46.584997+00 2022-06-13 07:00:46.584997+00 \N +cl_hxgith4h183u4z ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Phone Phone PhoneNumber character varying \N \N \N 8 f \N f f \N f \N \N \N \N character varying \N \N f {"func":["isMobilePhone"],"args":[""],"msg":["Validation failed : isMobilePhone"]} \N \N f 8 2022-06-13 07:00:46.594926+00 2022-06-13 07:00:46.594926+00 \N +cl_ogjv6btikkgvms ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Email Email Email text \N \N \N 9 f \N f f \N f \N \N \N \N text \N \N f {"func":["isEmail"],"args":[""],"msg":["Validation failed : isEmail"]} \N \N f 9 2022-06-13 07:00:46.604383+00 2022-06-13 07:00:46.604383+00 \N +cl_kzny6gvq67kmm5 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque URL URL URL text \N \N \N 10 f \N f f \N f \N \N \N \N text \N \N f {"func":["isURL"],"args":[""],"msg":["Validation failed : isURL"]} \N \N f 10 2022-06-13 07:00:46.61452+00 2022-06-13 07:00:46.61452+00 \N +cl_qgvbuwq5wlbkha ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Number Number Decimal numeric \N \N \N 11 f \N f f \N f \N \N \N \N numeric \N \N f \N \N \N f 11 2022-06-13 07:00:46.624567+00 2022-06-13 07:00:46.624567+00 \N +cl_fxv6wvzts1cuqr ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Value Value Currency numeric \N \N \N 12 f \N f f \N f \N \N \N \N numeric \N \N f {"func":["isCurrency"],"args":[""],"msg":["Validation failed : isCurrency"]} \N \N f 12 2022-06-13 07:00:46.632458+00 2022-06-13 07:00:46.632458+00 \N +cl_bysnatbas68gpj ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Percent Percent Percent double precision 53 \N \N 13 f \N f f \N f \N \N \N \N double precision 53 \N f \N \N \N f 13 2022-06-13 07:00:46.642566+00 2022-06-13 07:00:46.642566+00 \N +cl_la6r8q0u9bvyv3 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Duration Duration Duration bigint 64 0 \N 14 f \N f f \N f \N \N \N \N bigint 64 0 f \N \N \N f 14 2022-06-13 07:00:46.649838+00 2022-06-13 07:00:46.649838+00 \N +cl_7h4paqlpvotx4b ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Rating Rating Rating smallint 16 0 \N 15 f \N f f \N f \N \N \N \N smallint 16 0 f \N \N \N f 15 2022-06-13 07:00:46.660274+00 2022-06-13 07:00:46.660274+00 \N +cl_6lcfkyhon35cvg ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque ncRecordId ncRecordId ID character varying \N \N \N 16 t \N t f \N f \N \N \N \N character varying \N \N f \N \N \N f 16 2022-06-13 07:00:46.668049+00 2022-06-13 07:00:46.668049+00 {"ag":"nc"} +cl_n54t3vwjrtcn21 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_lh3bakzk8scz7r Notes Notes LongText text \N \N \N 2 f \N f f \N f \N \N \N \N text \N \N f \N \N \N f 2 2022-06-13 07:00:46.780418+00 2022-06-13 07:00:46.780418+00 \N +cl_c7daqht9ool1vw ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_lh3bakzk8scz7r Attachments Attachments Attachment text \N \N \N 3 f \N f f \N f \N \N \N \N text \N \N f \N \N \N f 3 2022-06-13 07:00:46.791223+00 2022-06-13 07:00:46.791223+00 \N +cl_wryamwhwnbigwz ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_lh3bakzk8scz7r Status Status SingleSelect text \N \N \N 4 f \N f f \N f \N \N \N \N text 'Todo','In progress','Done' \N f \N \N \N f 4 2022-06-13 07:00:46.799559+00 2022-06-13 07:00:46.799559+00 \N +cl_0fhoikbhmibfic ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_lh3bakzk8scz7r ncRecordId ncRecordId ID character varying \N \N \N 5 t \N t f \N f \N \N \N \N character varying \N \N f \N \N \N f 5 2022-06-13 07:00:46.82097+00 2022-06-13 07:00:46.82097+00 {"ag":"nc"} +cl_n4b1fuefgpulaz ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Notes Notes LongText text \N \N \N 2 f \N f f \N f \N \N \N \N text \N \N f \N \N \N f 2 2022-06-13 07:00:46.904484+00 2022-06-13 07:00:46.904484+00 \N +cl_ww1mtv3m2ni2vk ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Attachments Attachments Attachment text \N \N \N 3 f \N f f \N f \N \N \N \N text \N \N f \N \N \N f 3 2022-06-13 07:00:46.914975+00 2022-06-13 07:00:46.914975+00 \N +cl_9nxx6uy4779nio ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Status Status SingleSelect text \N \N \N 4 f \N f f \N f \N \N \N \N text 'Todo','In progress','Done' \N f \N \N \N f 4 2022-06-13 07:00:46.922998+00 2022-06-13 07:00:46.922998+00 \N +cl_g3q85k2zcg6hel ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 ncRecordId ncRecordId ID character varying \N \N \N 5 t \N t f \N f \N \N \N \N character varying \N \N f \N \N \N f 5 2022-06-13 07:00:46.940008+00 2022-06-13 07:00:46.940008+00 {"ag":"nc"} +cl_z8snfz1ltrtflk ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_affo9e0j69frre table2_id table2_id ForeignKey character varying \N \N \N \N t \N t f \N f \N \N \N \N \N \N \N \N \N \N \N f \N 2022-06-13 07:00:47.008263+00 2022-06-13 07:00:47.008263+00 \N +cl_47if01uivdzzr1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_affo9e0j69frre table1_id table1_id ForeignKey character varying \N \N \N \N t \N t f \N f \N \N \N \N \N \N \N \N \N \N \N f \N 2022-06-13 07:00:47.017259+00 2022-06-13 07:00:47.017259+00 \N +cl_5n7rh5cu5i9a94 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_affo9e0j69frre ActorRead \N LinkToAnotherRecord \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N t \N 2022-06-13 07:00:47.027375+00 2022-06-13 07:00:47.027375+00 \N +cl_vyl6nn9uu4rniw ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_lh3bakzk8scz7r nc_hblt___nc_m2m__9oevq0x2zList \N LinkToAnotherRecord \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N t \N 2022-06-13 07:00:47.038157+00 2022-06-13 07:00:47.038157+00 \N +cl_6zk113zuqps6am ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_affo9e0j69frre FilmRead \N LinkToAnotherRecord \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N t \N 2022-06-13 07:00:47.053446+00 2022-06-13 07:00:47.053446+00 \N +cl_9rp6davhp63srs ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque nc_hblt___nc_m2m__9oevq0x2zList \N LinkToAnotherRecord \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N t \N 2022-06-13 07:00:47.06279+00 2022-06-13 07:00:47.06279+00 \N +cl_rwe408zcovemvg ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Actor \N LinkToAnotherRecord \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N f \N 2022-06-13 07:00:47.083649+00 2022-06-13 07:00:47.083649+00 \N +cl_dqsqpoma8kd32h ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_lh3bakzk8scz7r Film \N LinkToAnotherRecord \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N f \N 2022-06-13 07:00:47.074089+00 2022-06-13 07:00:47.117106+00 \N +cl_pwko7vmwjem98l ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Status (from Actor) Status_from_Actor_ Lookup \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N f \N 2022-06-13 07:00:47.126046+00 2022-06-13 07:00:47.126046+00 \N +cl_f3v90bgeqa2goi ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque ncRecordHash ncRecordHash SingleLineText character varying \N \N \N 17 f f f f \N f \N \N \N \N character varying \N \N f \N \N \N t 17 2022-06-13 07:00:46.677926+00 2022-06-13 07:00:47.145779+00 \N +cl_hlsdaymegaxfcd ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Name Name SingleLineText text \N \N \N 1 f t f f \N f \N \N \N \N text \N \N f \N \N \N f 1 2022-06-13 07:00:46.489087+00 2022-06-13 07:00:47.147295+00 \N +cl_bhwzl5btwsdxee ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_lh3bakzk8scz7r ncRecordHash ncRecordHash SingleLineText character varying \N \N \N 6 f f f f \N f \N \N \N \N character varying \N \N f \N \N \N t 6 2022-06-13 07:00:46.82836+00 2022-06-13 07:00:47.155857+00 \N +cl_6h7ixf3wm93jl1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_lh3bakzk8scz7r Name Name SingleLineText text \N \N \N 1 f t f f \N f \N \N \N \N text \N \N f \N \N \N f 1 2022-06-13 07:00:46.77067+00 2022-06-13 07:00:47.157289+00 \N +cl_b2e2n1x0i8lom1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 ncRecordHash ncRecordHash SingleLineText character varying \N \N \N 6 f f f f \N f \N \N \N \N character varying \N \N f \N \N \N t 6 2022-06-13 07:00:46.951073+00 2022-06-13 07:00:47.16632+00 \N +cl_k1r4k8c2etb6pi ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Name Name SingleLineText text \N \N \N 1 f t f f \N f \N \N \N \N text \N \N f \N \N \N f 1 2022-06-13 07:00:46.894884+00 2022-06-13 07:00:47.167507+00 \N +cl_6ipbhm6pdd136g ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 nc_hblt___Film_id nc_hblt___Film_id ForeignKey character varying \N \N \N \N f \N f f \N f \N \N \N \N \N \N \N \N \N \N \N f \N 2022-06-13 07:03:47.360055+00 2022-06-13 07:03:47.360055+00 \N +cl_0xvph5t8e5b667 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 FilmRead \N LinkToAnotherRecord \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N f \N 2022-06-13 07:03:47.456767+00 2022-06-13 07:03:47.456767+00 \N +cl_bmar4762fidxnd ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Producer \N LinkToAnotherRecord \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N f \N 2022-06-13 07:03:47.567198+00 2022-06-13 07:03:47.567198+00 \N +cl_tm7ltwcixu34qm ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque RollUp \N Rollup \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N f \N 2022-06-13 07:12:16.715538+00 2022-06-13 07:12:16.715538+00 \N +cl_cvxw412ltg7f82 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Computation \N Formula \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N f \N 2022-06-13 07:18:06.399472+00 2022-06-13 07:18:06.399472+00 \N +\. + + +-- +-- Data for Name: nc_cron; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_cron (id, project_id, db_alias, title, description, env, pattern, webhook, timezone, active, cron_handler, payload, headers, retries, retry_interval, timeout, created_at, updated_at) FROM stdin; +\. + + +-- +-- Name: nc_cron_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_cron_id_seq', 1, false); + + +-- +-- Data for Name: nc_disabled_models_for_role; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_disabled_models_for_role (id, project_id, db_alias, title, type, role, disabled, tn, rtn, cn, rcn, relation_type, created_at, updated_at, parent_model_title) FROM stdin; +\. + + +-- +-- Name: nc_disabled_models_for_role_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_disabled_models_for_role_id_seq', 1, false); + + +-- +-- Data for Name: nc_disabled_models_for_role_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_disabled_models_for_role_v2 (id, base_id, project_id, fk_view_id, role, disabled, created_at, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: nc_evolutions; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_evolutions (id, title, "titleDown", description, batch, checksum, status, created, created_at, updated_at) FROM stdin; +\. + + +-- +-- Name: nc_evolutions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_evolutions_id_seq', 1, false); + + +-- +-- Data for Name: nc_filter_exp_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_filter_exp_v2 (id, base_id, project_id, fk_view_id, fk_hook_id, fk_column_id, fk_parent_id, logical_op, comparison_op, value, is_group, "order", created_at, updated_at) FROM stdin; +fi_t6nxj5j347512m ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_yv75dsa7wwvj3u \N cl_6h7ixf3wm93jl1 \N or like 1 \N 1 2022-06-13 07:00:50.970914+00 2022-06-13 07:00:50.970914+00 +fi_qm5cawmskdby4t ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_yv75dsa7wwvj3u \N cl_6h7ixf3wm93jl1 \N or like 2 \N 2 2022-06-13 07:00:50.976278+00 2022-06-13 07:00:50.976278+00 +\. + + +-- +-- Data for Name: nc_form_view_columns_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_form_view_columns_v2 (id, base_id, project_id, fk_view_id, fk_column_id, uuid, label, help, description, required, show, "order", created_at, updated_at) FROM stdin; +fvc_u2ojuq1vnqw4pk ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_9rp6davhp63srs \N \N \N \N \N f 18 2022-06-13 07:00:56.594514+00 2022-06-13 07:00:56.594514+00 +fvc_rmv6v987gceq17 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_6lcfkyhon35cvg \N \N \N \N \N f 20 2022-06-13 07:00:56.578148+00 2022-06-13 07:00:56.64852+00 +fvc_qy20qetwvcg9m5 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_f3v90bgeqa2goi \N \N \N \N \N f 21 2022-06-13 07:00:56.585404+00 2022-06-13 07:00:56.659778+00 +fvc_6v6hvl1v7cunao ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_2qmjsmw5ilkjb1 \N \N \N \N \N f 1 2022-06-13 07:00:56.489087+00 2022-06-13 07:00:56.673885+00 +fvc_mv3qhbkblitu5c ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_lfjck1f7baljji \N \N \N \N \N f 2 2022-06-13 07:00:56.479824+00 2022-06-13 07:00:56.683156+00 +fvc_nbned912aqydu8 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_wbbiahyr1io2nq cl_ww1mtv3m2ni2vk \N \N \N \N \N t 3 2022-06-13 07:00:58.071582+00 2022-06-13 07:00:58.157964+00 +fvc_ddrlkegji82bg9 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_hlsdaymegaxfcd \N DisplayName \N HelpText t t 3 2022-06-13 07:00:56.442415+00 2022-06-13 07:00:56.69921+00 +fvc_rfnw6u3h0ysngt ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_4af04om9pttcix \N \N \N \N \N f 4 2022-06-13 07:00:56.454183+00 2022-06-13 07:00:56.708975+00 +fvc_kemy0jqhodqz2q ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_wsoajtyx4w8f2h \N \N \N \N \N f 5 2022-06-13 07:00:56.462909+00 2022-06-13 07:00:56.729472+00 +fvc_6je7jby6ykiao2 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_vjlucu8q3zjj79 \N \N \N \N \N f 6 2022-06-13 07:00:56.471636+00 2022-06-13 07:00:56.739344+00 +fvc_ipqvfuv5g5851d ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_xa33l1z0bwzc1q \N \N \N \N \N f 7 2022-06-13 07:00:56.4986+00 2022-06-13 07:00:56.74851+00 +fvc_xez2nnv38cd2uv ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_hxgith4h183u4z \N \N \N \N \N f 8 2022-06-13 07:00:56.507946+00 2022-06-13 07:00:56.757545+00 +fvc_zxgkovq7xgbe3b ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_ogjv6btikkgvms \N \N \N \N \N t 9 2022-06-13 07:00:56.516876+00 2022-06-13 07:00:56.767001+00 +fvc_1q1zdoyemlqz01 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_kzny6gvq67kmm5 \N \N \N \N \N f 10 2022-06-13 07:00:56.527542+00 2022-06-13 07:00:56.778631+00 +fvc_dh4bm6cto4miwn ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_qgvbuwq5wlbkha \N \N \N \N \N f 11 2022-06-13 07:00:56.537408+00 2022-06-13 07:00:56.821372+00 +fvc_67ijek7zh8uco3 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_fxv6wvzts1cuqr \N \N \N \N \N f 12 2022-06-13 07:00:56.545791+00 2022-06-13 07:00:56.831132+00 +fvc_94r5bs44yamzdr ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_bysnatbas68gpj \N \N \N \N \N f 13 2022-06-13 07:00:56.55431+00 2022-06-13 07:00:56.842614+00 +fvc_nvyfzx4qnjcjy7 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_la6r8q0u9bvyv3 \N \N \N \N \N f 14 2022-06-13 07:00:56.561896+00 2022-06-13 07:00:56.855275+00 +fvc_v8bm5kh3swns0a ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_7h4paqlpvotx4b \N \N \N \N \N f 15 2022-06-13 07:00:56.569879+00 2022-06-13 07:00:56.86635+00 +fvc_4xjebszr5nqvt9 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_rwe408zcovemvg \N \N \N \N \N f 17 2022-06-13 07:00:56.602071+00 2022-06-13 07:00:56.882392+00 +fvc_cg1t2inp7oytk9 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu cl_pwko7vmwjem98l \N \N \N \N \N f 18 2022-06-13 07:00:56.610126+00 2022-06-13 07:00:56.909285+00 +fvc_5c0og7xxjhi6pc ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_wbbiahyr1io2nq cl_g3q85k2zcg6hel \N \N \N \N \N f 5 2022-06-13 07:00:58.090482+00 2022-06-13 07:00:58.117047+00 +fvc_bkmt8out4sameo ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_wbbiahyr1io2nq cl_b2e2n1x0i8lom1 \N \N \N \N \N f 6 2022-06-13 07:00:58.094685+00 2022-06-13 07:00:58.125297+00 +fvc_2357ces50d9u2b ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_wbbiahyr1io2nq cl_k1r4k8c2etb6pi \N \N \N \N \N t 1 2022-06-13 07:00:58.040599+00 2022-06-13 07:00:58.141501+00 +fvc_rkix5hk7feythi ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_wbbiahyr1io2nq cl_n4b1fuefgpulaz \N \N \N \N \N t 2 2022-06-13 07:00:58.060906+00 2022-06-13 07:00:58.152124+00 +fvc_hu4umv8zfmr5j0 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_wbbiahyr1io2nq cl_9nxx6uy4779nio \N \N \N \N \N t 4 2022-06-13 07:00:58.08333+00 2022-06-13 07:00:58.165944+00 +fvc_k6pv5z95foolhh ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_8sgx53tn88hkfh cl_g3q85k2zcg6hel \N \N \N \N \N f 5 2022-06-13 07:00:59.188438+00 2022-06-13 07:00:59.244551+00 +fvc_mxplayg4mcbzhw ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_8sgx53tn88hkfh cl_b2e2n1x0i8lom1 \N \N \N \N \N f 6 2022-06-13 07:00:59.206948+00 2022-06-13 07:00:59.254236+00 +fvc_ecc23xqy1s1wry ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_8sgx53tn88hkfh cl_k1r4k8c2etb6pi \N \N \N \N \N t 1 2022-06-13 07:00:59.135908+00 2022-06-13 07:00:59.271778+00 +fvc_ahssgauqm8oyb0 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_8sgx53tn88hkfh cl_n4b1fuefgpulaz \N \N \N \N \N t 2 2022-06-13 07:00:59.148509+00 2022-06-13 07:00:59.288347+00 +fvc_3jthqyt2ddvn79 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_8sgx53tn88hkfh cl_ww1mtv3m2ni2vk \N \N \N \N \N t 3 2022-06-13 07:00:59.160501+00 2022-06-13 07:00:59.308228+00 +fvc_mmezmkxhuzjmqu ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_8sgx53tn88hkfh cl_9nxx6uy4779nio \N \N \N \N \N t 4 2022-06-13 07:00:59.17426+00 2022-06-13 07:00:59.317478+00 +fvc_q7hzhwdld40t3i ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_a71vtm0kxaoh6r cl_g3q85k2zcg6hel \N \N \N \N \N f 5 2022-06-13 07:01:00.150868+00 2022-06-13 07:01:00.198795+00 +fvc_qrn3f6ddmfblxz ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_a71vtm0kxaoh6r cl_b2e2n1x0i8lom1 \N \N \N \N \N f 6 2022-06-13 07:01:00.164468+00 2022-06-13 07:01:00.206965+00 +fvc_ihxjavs9h1bkvu ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_a71vtm0kxaoh6r cl_k1r4k8c2etb6pi \N \N \N \N \N t 1 2022-06-13 07:01:00.089175+00 2022-06-13 07:01:00.213093+00 +fvc_jmh75r615prjv1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_a71vtm0kxaoh6r cl_n4b1fuefgpulaz \N \N \N \N \N t 2 2022-06-13 07:01:00.102895+00 2022-06-13 07:01:00.222971+00 +fvc_oyufsnfzqmlm4n ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_a71vtm0kxaoh6r cl_ww1mtv3m2ni2vk \N \N \N \N \N t 3 2022-06-13 07:01:00.117207+00 2022-06-13 07:01:00.231264+00 +fvc_rk6yivlqdfpcq0 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_a71vtm0kxaoh6r cl_9nxx6uy4779nio \N \N \N \N \N t 4 2022-06-13 07:01:00.134384+00 2022-06-13 07:01:00.237726+00 +fvc_c3y0ue9cdhv971 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_8fky8viw54t7tk cl_g3q85k2zcg6hel \N \N \N \N \N f 5 2022-06-13 07:01:01.380491+00 2022-06-13 07:01:01.421152+00 +fvc_gi3m78htruuxwq ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_8fky8viw54t7tk cl_b2e2n1x0i8lom1 \N \N \N \N \N f 6 2022-06-13 07:01:01.391478+00 2022-06-13 07:01:01.440479+00 +fvc_d1i5ctitaq00fe ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_8fky8viw54t7tk cl_k1r4k8c2etb6pi \N \N \N \N \N t 1 2022-06-13 07:01:01.334552+00 2022-06-13 07:01:01.451123+00 +fvc_anjrum7zbmjg7t ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_8fky8viw54t7tk cl_n4b1fuefgpulaz \N \N \N \N \N t 2 2022-06-13 07:01:01.343935+00 2022-06-13 07:01:01.462423+00 +fvc_3k1wv3ye870cfi ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_8fky8viw54t7tk cl_ww1mtv3m2ni2vk \N \N \N \N \N t 3 2022-06-13 07:01:01.354956+00 2022-06-13 07:01:01.472925+00 +fvc_2lrffqqpiif5af ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_8fky8viw54t7tk cl_9nxx6uy4779nio \N \N \N \N \N t 4 2022-06-13 07:01:01.366783+00 2022-06-13 07:01:01.482545+00 +\. + + +-- +-- Data for Name: nc_form_view_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_form_view_v2 (base_id, project_id, fk_view_id, heading, subheading, success_msg, redirect_url, redirect_after_secs, email, submit_another_form, show_blank_form, uuid, banner_image_url, logo_url, created_at, updated_at) FROM stdin; +ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ubm72q5tlmccvu FormTitle FormDescription Thank you for submitting the form! \N \N \N t t \N \N \N 2022-06-13 07:00:56.408087+00 2022-06-13 07:00:56.408087+00 +ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_wbbiahyr1io2nq Form Thank you for submitting the form! \N \N \N f f \N \N \N 2022-06-13 07:00:58.024167+00 2022-06-13 07:00:58.024167+00 +ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_8sgx53tn88hkfh Form 2 Thank you for submitting the form! \N \N \N f f \N \N \N 2022-06-13 07:00:59.116324+00 2022-06-13 07:00:59.116324+00 +ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_a71vtm0kxaoh6r Form 3 Thank you for submitting the form! \N \N \N f f \N \N \N 2022-06-13 07:01:00.073996+00 2022-06-13 07:01:00.073996+00 +ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_8fky8viw54t7tk Form 4 Thank you for submitting the form! \N \N \N f f \N \N \N 2022-06-13 07:01:01.318722+00 2022-06-13 07:01:01.318722+00 +\. + + +-- +-- Data for Name: nc_gallery_view_columns_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_gallery_view_columns_v2 (id, base_id, project_id, fk_view_id, fk_column_id, uuid, label, help, show, "order", created_at, updated_at) FROM stdin; +gvc_fdf5sq085oyhke ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ordkcxhwg8pg88 cl_k1r4k8c2etb6pi \N \N \N t 1 2022-06-13 07:01:02.634002+00 2022-06-13 07:01:02.634002+00 +gvc_npisvpy5je6crr ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ordkcxhwg8pg88 cl_n4b1fuefgpulaz \N \N \N t 2 2022-06-13 07:01:02.644045+00 2022-06-13 07:01:02.644045+00 +gvc_bos72nyrk2fdgu ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ordkcxhwg8pg88 cl_ww1mtv3m2ni2vk \N \N \N t 3 2022-06-13 07:01:02.65299+00 2022-06-13 07:01:02.65299+00 +gvc_gx4ng411g2rsru ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ordkcxhwg8pg88 cl_9nxx6uy4779nio \N \N \N t 4 2022-06-13 07:01:02.660355+00 2022-06-13 07:01:02.660355+00 +gvc_ki8zxf4e4a38bp ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ordkcxhwg8pg88 cl_g3q85k2zcg6hel \N \N \N f 5 2022-06-13 07:01:02.666371+00 2022-06-13 07:01:02.666371+00 +gvc_qjpace90y1t495 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ordkcxhwg8pg88 cl_b2e2n1x0i8lom1 \N \N \N f 6 2022-06-13 07:01:02.672824+00 2022-06-13 07:01:02.672824+00 +gvc_ozhbn65l9970kp ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_p28ldcq3zy32b9 cl_k1r4k8c2etb6pi \N \N \N t 1 2022-06-13 07:01:03.552121+00 2022-06-13 07:01:03.552121+00 +gvc_kb4nnalshf8jga ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_p28ldcq3zy32b9 cl_n4b1fuefgpulaz \N \N \N t 2 2022-06-13 07:01:03.565355+00 2022-06-13 07:01:03.565355+00 +gvc_xgtpvrge7wl8my ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_p28ldcq3zy32b9 cl_ww1mtv3m2ni2vk \N \N \N t 3 2022-06-13 07:01:03.579307+00 2022-06-13 07:01:03.579307+00 +gvc_d542ixr95oz4v7 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_p28ldcq3zy32b9 cl_9nxx6uy4779nio \N \N \N t 4 2022-06-13 07:01:03.596485+00 2022-06-13 07:01:03.596485+00 +gvc_0b91hc70t5uxxu ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_p28ldcq3zy32b9 cl_g3q85k2zcg6hel \N \N \N f 5 2022-06-13 07:01:03.611141+00 2022-06-13 07:01:03.611141+00 +gvc_tbv5dfz7wkogi1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_p28ldcq3zy32b9 cl_b2e2n1x0i8lom1 \N \N \N f 6 2022-06-13 07:01:03.623722+00 2022-06-13 07:01:03.623722+00 +gvc_4x012uwduoea0d ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_clfkzvyypltmto cl_k1r4k8c2etb6pi \N \N \N t 1 2022-06-13 07:01:04.560034+00 2022-06-13 07:01:04.560034+00 +gvc_qb0nzrjf9uslxo ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_clfkzvyypltmto cl_n4b1fuefgpulaz \N \N \N t 2 2022-06-13 07:01:04.583622+00 2022-06-13 07:01:04.583622+00 +gvc_jk1emk7ck66dlg ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_clfkzvyypltmto cl_ww1mtv3m2ni2vk \N \N \N t 3 2022-06-13 07:01:04.599055+00 2022-06-13 07:01:04.599055+00 +gvc_ayooq0861rapkc ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_clfkzvyypltmto cl_9nxx6uy4779nio \N \N \N t 4 2022-06-13 07:01:04.614846+00 2022-06-13 07:01:04.614846+00 +gvc_wy3wm9b1s0t1yp ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_clfkzvyypltmto cl_g3q85k2zcg6hel \N \N \N f 5 2022-06-13 07:01:04.632162+00 2022-06-13 07:01:04.632162+00 +gvc_48p65fs27ujlcc ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_clfkzvyypltmto cl_b2e2n1x0i8lom1 \N \N \N f 6 2022-06-13 07:01:04.644409+00 2022-06-13 07:01:04.644409+00 +gvc_n34nspi8774yd1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ordkcxhwg8pg88 cl_6ipbhm6pdd136g \N \N \N t 7 2022-06-13 07:03:47.413463+00 2022-06-13 07:03:47.413463+00 +gvc_cu45kmof915l1h ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_p28ldcq3zy32b9 cl_6ipbhm6pdd136g \N \N \N t 7 2022-06-13 07:03:47.426389+00 2022-06-13 07:03:47.426389+00 +gvc_e5thbg68iyv9w0 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_clfkzvyypltmto cl_6ipbhm6pdd136g \N \N \N t 7 2022-06-13 07:03:47.434642+00 2022-06-13 07:03:47.434642+00 +gvc_f4jmr4fciclbf8 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ordkcxhwg8pg88 cl_0xvph5t8e5b667 \N \N \N t 8 2022-06-13 07:03:47.534593+00 2022-06-13 07:03:47.534593+00 +gvc_o6wlma7btrzrsi ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_p28ldcq3zy32b9 cl_0xvph5t8e5b667 \N \N \N t 8 2022-06-13 07:03:47.546265+00 2022-06-13 07:03:47.546265+00 +gvc_gepq7oz4ml4ifc ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_clfkzvyypltmto cl_0xvph5t8e5b667 \N \N \N t 8 2022-06-13 07:03:47.554271+00 2022-06-13 07:03:47.554271+00 +\. + + +-- +-- Data for Name: nc_gallery_view_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_gallery_view_v2 (base_id, project_id, fk_view_id, next_enabled, prev_enabled, cover_image_idx, fk_cover_image_col_id, cover_image, restrict_types, restrict_size, restrict_number, public, dimensions, responsive_columns, created_at, updated_at) FROM stdin; +ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_ordkcxhwg8pg88 \N \N \N cl_ww1mtv3m2ni2vk \N \N \N \N \N \N \N 2022-06-13 07:01:02.612706+00 2022-06-13 07:01:02.612706+00 +ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_p28ldcq3zy32b9 \N \N \N cl_ww1mtv3m2ni2vk \N \N \N \N \N \N \N 2022-06-13 07:01:03.534093+00 2022-06-13 07:01:03.534093+00 +ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_clfkzvyypltmto \N \N \N cl_ww1mtv3m2ni2vk \N \N \N \N \N \N \N 2022-06-13 07:01:04.542404+00 2022-06-13 07:01:04.542404+00 +\. + + +-- +-- Data for Name: nc_grid_view_columns_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_grid_view_columns_v2 (id, fk_view_id, fk_column_id, base_id, project_id, uuid, label, help, width, show, "order", created_at, updated_at) FROM stdin; +nc_p3036vdor71tcg vw_0lwyv8ap72h0by cl_z8snfz1ltrtflk ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 1 2022-06-13 07:00:47.014311+00 2022-06-13 07:00:47.014311+00 +nc_rtwcpmh94zn5jb vw_0lwyv8ap72h0by cl_47if01uivdzzr1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 2 2022-06-13 07:00:47.020636+00 2022-06-13 07:00:47.020636+00 +nc_wjnvcpc1ehvicv vw_0lwyv8ap72h0by cl_5n7rh5cu5i9a94 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 3 2022-06-13 07:00:47.034186+00 2022-06-13 07:00:47.034186+00 +nc_mnrp1m0pusbu6w vw_mwyhnlv1f3g99f cl_vyl6nn9uu4rniw ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 7 2022-06-13 07:00:47.046469+00 2022-06-13 07:00:47.046469+00 +nc_xycjz311tzd9wq vw_0lwyv8ap72h0by cl_6zk113zuqps6am ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 4 2022-06-13 07:00:47.058994+00 2022-06-13 07:00:47.058994+00 +nc_pfm1g8kctevft5 vw_9msmfh7uv5mfwz cl_9rp6davhp63srs ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 18 2022-06-13 07:00:47.070158+00 2022-06-13 07:00:47.070158+00 +nc_yysch0oeic3pko vw_9msmfh7uv5mfwz cl_6lcfkyhon35cvg ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 20 2022-06-13 07:00:46.674522+00 2022-06-13 07:00:48.330465+00 +nc_r5gg8fmrn411hz vw_9msmfh7uv5mfwz cl_f3v90bgeqa2goi ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 21 2022-06-13 07:00:46.68307+00 2022-06-13 07:00:48.336253+00 +nc_kemi9uxkynpw2d vw_9msmfh7uv5mfwz cl_hlsdaymegaxfcd ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 1 2022-06-13 07:00:46.494327+00 2022-06-13 07:00:48.342454+00 +nc_es29o569ixz3ju vw_9msmfh7uv5mfwz cl_4af04om9pttcix ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 2 2022-06-13 07:00:46.504369+00 2022-06-13 07:00:48.348779+00 +nc_oy46yoxa98vyaa vw_9msmfh7uv5mfwz cl_wsoajtyx4w8f2h ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 3 2022-06-13 07:00:46.510689+00 2022-06-13 07:00:48.355208+00 +nc_t3zagifwcb2tmf vw_9msmfh7uv5mfwz cl_vjlucu8q3zjj79 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 4 2022-06-13 07:00:46.52765+00 2022-06-13 07:00:48.363461+00 +nc_m3snwp55wj6m25 vw_9msmfh7uv5mfwz cl_2qmjsmw5ilkjb1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 5 2022-06-13 07:00:46.581745+00 2022-06-13 07:00:48.369173+00 +nc_7d3ksxo06g9gwv vw_9msmfh7uv5mfwz cl_lfjck1f7baljji ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 6 2022-06-13 07:00:46.533604+00 2022-06-13 07:00:48.377504+00 +nc_q490kj229bt3w9 vw_9msmfh7uv5mfwz cl_xa33l1z0bwzc1q ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 7 2022-06-13 07:00:46.591898+00 2022-06-13 07:00:48.383496+00 +nc_6wtsnglud7zwat vw_9msmfh7uv5mfwz cl_hxgith4h183u4z ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 8 2022-06-13 07:00:46.600116+00 2022-06-13 07:00:48.390999+00 +nc_928jmp9ucgln1x vw_9msmfh7uv5mfwz cl_ogjv6btikkgvms ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 9 2022-06-13 07:00:46.611941+00 2022-06-13 07:00:48.396348+00 +nc_xhejzoxgux94f4 vw_9msmfh7uv5mfwz cl_kzny6gvq67kmm5 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 10 2022-06-13 07:00:46.61952+00 2022-06-13 07:00:48.405051+00 +nc_r9czm157e6wob0 vw_9msmfh7uv5mfwz cl_qgvbuwq5wlbkha ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 11 2022-06-13 07:00:46.629416+00 2022-06-13 07:00:48.415004+00 +nc_no4atef7iup9jn vw_9msmfh7uv5mfwz cl_fxv6wvzts1cuqr ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 12 2022-06-13 07:00:46.63671+00 2022-06-13 07:00:48.42308+00 +nc_k8wf4onr34olbi vw_9msmfh7uv5mfwz cl_bysnatbas68gpj ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 13 2022-06-13 07:00:46.646679+00 2022-06-13 07:00:48.43115+00 +nc_jpiglrf93lwhs5 vw_9msmfh7uv5mfwz cl_la6r8q0u9bvyv3 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 14 2022-06-13 07:00:46.658065+00 2022-06-13 07:00:48.43928+00 +nc_b4mif9fhi150g5 vw_9msmfh7uv5mfwz cl_7h4paqlpvotx4b ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 15 2022-06-13 07:00:46.664603+00 2022-06-13 07:00:48.450075+00 +nc_ffwwtetdeztsp0 vw_9msmfh7uv5mfwz cl_rwe408zcovemvg ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 17 2022-06-13 07:00:47.09128+00 2022-06-13 07:00:48.46182+00 +nc_q8b0ds8gsmx6yg vw_9msmfh7uv5mfwz cl_pwko7vmwjem98l ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 18 2022-06-13 07:00:47.132759+00 2022-06-13 07:00:48.468008+00 +nc_bb28y20xyzv7yb vw_mwyhnlv1f3g99f cl_0fhoikbhmibfic ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 6 2022-06-13 07:00:46.823943+00 2022-06-13 07:00:49.622023+00 +nc_v50zqijtrtxg3e vw_mwyhnlv1f3g99f cl_bhwzl5btwsdxee ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 7 2022-06-13 07:00:46.832863+00 2022-06-13 07:00:49.630902+00 +nc_js5mz2dpk8oa0b vw_mwyhnlv1f3g99f cl_6h7ixf3wm93jl1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 1 2022-06-13 07:00:46.777204+00 2022-06-13 07:00:49.641962+00 +nc_lh45wsaagxhkmq vw_mwyhnlv1f3g99f cl_n54t3vwjrtcn21 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 2 2022-06-13 07:00:46.788319+00 2022-06-13 07:00:49.651499+00 +nc_cdo3scwiya6tu7 vw_mwyhnlv1f3g99f cl_wryamwhwnbigwz ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 4 2022-06-13 07:00:46.816421+00 2022-06-13 07:00:49.67104+00 +nc_ypqcyf5r1hwf6a vw_mwyhnlv1f3g99f cl_dqsqpoma8kd32h ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 5 2022-06-13 07:00:47.080157+00 2022-06-13 07:00:49.681008+00 +nc_97rp3yjzljzwze vw_yv75dsa7wwvj3u cl_vyl6nn9uu4rniw ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 7 2022-06-13 07:00:50.893952+00 2022-06-13 07:00:50.893952+00 +nc_jnoncpm79y181g vw_yv75dsa7wwvj3u cl_0fhoikbhmibfic ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 6 2022-06-13 07:00:50.882205+00 2022-06-13 07:00:50.924296+00 +nc_juhz25rlcq70wo vw_yv75dsa7wwvj3u cl_bhwzl5btwsdxee ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 7 2022-06-13 07:00:50.887551+00 2022-06-13 07:00:50.929452+00 +nc_311i0srvhhwyxn vw_yv75dsa7wwvj3u cl_6h7ixf3wm93jl1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 1 2022-06-13 07:00:50.851704+00 2022-06-13 07:00:50.944848+00 +nc_cpau26wsrp8rou vw_yv75dsa7wwvj3u cl_n54t3vwjrtcn21 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 2 2022-06-13 07:00:50.860357+00 2022-06-13 07:00:50.953764+00 +nc_7ofrlb572531ym vw_yv75dsa7wwvj3u cl_c7daqht9ool1vw ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 3 2022-06-13 07:00:50.869214+00 2022-06-13 07:00:50.958269+00 +nc_q3o41o0evbbbgo vw_yv75dsa7wwvj3u cl_wryamwhwnbigwz ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 4 2022-06-13 07:00:50.875272+00 2022-06-13 07:00:50.962747+00 +nc_jkjgs2dwulw8ec vw_yv75dsa7wwvj3u cl_dqsqpoma8kd32h ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 5 2022-06-13 07:00:50.901517+00 2022-06-13 07:00:50.966954+00 +nc_6ci3gpelc9tpcn vw_3lc5xx7fjg3zfp cl_g3q85k2zcg6hel ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 5 2022-06-13 07:00:46.947821+00 2022-06-13 07:00:52.294507+00 +nc_r5fcm9vik7ctlk vw_3lc5xx7fjg3zfp cl_b2e2n1x0i8lom1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 6 2022-06-13 07:00:46.955471+00 2022-06-13 07:00:52.30456+00 +nc_kxda0trjrwjbxe vw_3lc5xx7fjg3zfp cl_k1r4k8c2etb6pi ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 1 2022-06-13 07:00:46.9007+00 2022-06-13 07:00:52.319725+00 +nc_594s1wzkrnn5f3 vw_3lc5xx7fjg3zfp cl_n4b1fuefgpulaz ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 2 2022-06-13 07:00:46.909751+00 2022-06-13 07:00:52.335168+00 +nc_5g3mn9mmj6x2yc vw_3lc5xx7fjg3zfp cl_ww1mtv3m2ni2vk ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 3 2022-06-13 07:00:46.919814+00 2022-06-13 07:00:52.342989+00 +nc_02izvt5imuh74m vw_3lc5xx7fjg3zfp cl_9nxx6uy4779nio ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 4 2022-06-13 07:00:46.937166+00 2022-06-13 07:00:52.351127+00 +nc_3ognn8p7pkpplu vw_4awlw6zujst2vm cl_k1r4k8c2etb6pi ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 1 2022-06-13 07:00:53.186997+00 2022-06-13 07:00:53.31388+00 +nc_decmrf3kdjggii vw_4awlw6zujst2vm cl_n4b1fuefgpulaz ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 2 2022-06-13 07:00:53.198842+00 2022-06-13 07:00:53.325195+00 +nc_9ksakiegy3i011 vw_4awlw6zujst2vm cl_ww1mtv3m2ni2vk ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 3 2022-06-13 07:00:53.210687+00 2022-06-13 07:00:53.334357+00 +nc_j8sla3zlzg3t35 vw_4awlw6zujst2vm cl_9nxx6uy4779nio ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 4 2022-06-13 07:00:53.227058+00 2022-06-13 07:00:53.343182+00 +nc_iw3itivmurdpzf vw_mwyhnlv1f3g99f cl_c7daqht9ool1vw ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 3 2022-06-13 07:00:46.795294+00 2022-06-13 07:18:25.131701+00 +nc_zapsj1o1mi5l8s vw_4awlw6zujst2vm cl_g3q85k2zcg6hel ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 5 2022-06-13 07:00:53.242246+00 2022-06-13 07:00:53.29495+00 +nc_qav1hj6k4vzxwt vw_4awlw6zujst2vm cl_b2e2n1x0i8lom1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 6 2022-06-13 07:00:53.251619+00 2022-06-13 07:00:53.304144+00 +nc_dxrnz33mq361o0 vw_xov4el1bqpsgy8 cl_g3q85k2zcg6hel ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 5 2022-06-13 07:00:54.171865+00 2022-06-13 07:00:54.219929+00 +nc_z28vgsvqdxb5ik vw_xov4el1bqpsgy8 cl_b2e2n1x0i8lom1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 6 2022-06-13 07:00:54.181926+00 2022-06-13 07:00:54.229079+00 +nc_a4x1p4779ojlmy vw_xov4el1bqpsgy8 cl_k1r4k8c2etb6pi ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 1 2022-06-13 07:00:54.127622+00 2022-06-13 07:00:54.241707+00 +nc_1rqc8t4hotxgum vw_xov4el1bqpsgy8 cl_n4b1fuefgpulaz ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 2 2022-06-13 07:00:54.141353+00 2022-06-13 07:00:54.250471+00 +nc_738hspkw1h5uwj vw_xov4el1bqpsgy8 cl_ww1mtv3m2ni2vk ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 3 2022-06-13 07:00:54.153028+00 2022-06-13 07:00:54.261186+00 +nc_tl1g0fzdc2x2xv vw_xov4el1bqpsgy8 cl_9nxx6uy4779nio ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 4 2022-06-13 07:00:54.163307+00 2022-06-13 07:00:54.270846+00 +nc_n1dmcjoydwhlbz vw_vdsb71p2zbuors cl_g3q85k2zcg6hel ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 5 2022-06-13 07:00:55.257986+00 2022-06-13 07:00:55.318598+00 +nc_flzfanfhx5f6ki vw_vdsb71p2zbuors cl_b2e2n1x0i8lom1 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px f 6 2022-06-13 07:00:55.274398+00 2022-06-13 07:00:55.331246+00 +nc_oytaoy426c9xlz vw_vdsb71p2zbuors cl_k1r4k8c2etb6pi ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 1 2022-06-13 07:00:55.205131+00 2022-06-13 07:00:55.346505+00 +nc_vo5nq6y911991x vw_vdsb71p2zbuors cl_n4b1fuefgpulaz ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 2 2022-06-13 07:00:55.218442+00 2022-06-13 07:00:55.360259+00 +nc_iptfnph9g8od2y vw_vdsb71p2zbuors cl_ww1mtv3m2ni2vk ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 3 2022-06-13 07:00:55.231002+00 2022-06-13 07:00:55.374222+00 +nc_583xt72pp8wuh3 vw_vdsb71p2zbuors cl_9nxx6uy4779nio ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 4 2022-06-13 07:00:55.243037+00 2022-06-13 07:00:55.38442+00 +nc_dyhd79zccw82vz vw_3lc5xx7fjg3zfp cl_6ipbhm6pdd136g ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 7 2022-06-13 07:03:47.370665+00 2022-06-13 07:03:47.370665+00 +nc_7xg07yeusl8m4l vw_4awlw6zujst2vm cl_6ipbhm6pdd136g ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 7 2022-06-13 07:03:47.379454+00 2022-06-13 07:03:47.379454+00 +nc_frfckt9vjzd4yj vw_xov4el1bqpsgy8 cl_6ipbhm6pdd136g ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 7 2022-06-13 07:03:47.389186+00 2022-06-13 07:03:47.389186+00 +nc_um0df010uwl7kc vw_vdsb71p2zbuors cl_6ipbhm6pdd136g ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 7 2022-06-13 07:03:47.401703+00 2022-06-13 07:03:47.401703+00 +nc_htsm0dnoexwj9n vw_3lc5xx7fjg3zfp cl_0xvph5t8e5b667 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 8 2022-06-13 07:03:47.473203+00 2022-06-13 07:03:47.473203+00 +nc_ypoy7r91p0rhqj vw_4awlw6zujst2vm cl_0xvph5t8e5b667 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 8 2022-06-13 07:03:47.480713+00 2022-06-13 07:03:47.480713+00 +nc_o76u11wp2bm3ev vw_xov4el1bqpsgy8 cl_0xvph5t8e5b667 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 8 2022-06-13 07:03:47.487842+00 2022-06-13 07:03:47.487842+00 +nc_1m8ktkoebndee0 vw_vdsb71p2zbuors cl_0xvph5t8e5b667 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 8 2022-06-13 07:03:47.527298+00 2022-06-13 07:03:47.527298+00 +nc_vliqjg6nitvx6a vw_9msmfh7uv5mfwz cl_bmar4762fidxnd ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 22 2022-06-13 07:03:47.588481+00 2022-06-13 07:03:47.588481+00 +nc_zxfe8l4opfbz99 vw_9msmfh7uv5mfwz cl_tm7ltwcixu34qm ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 23 2022-06-13 07:12:16.746968+00 2022-06-13 07:12:16.746968+00 +nc_pb69judn9ql502 vw_9msmfh7uv5mfwz cl_cvxw412ltg7f82 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N \N \N 200px t 24 2022-06-13 07:18:06.434415+00 2022-06-13 07:18:06.434415+00 +\. + + +-- +-- Data for Name: nc_grid_view_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_grid_view_v2 (fk_view_id, base_id, project_id, uuid, created_at, updated_at) FROM stdin; +vw_9msmfh7uv5mfwz ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N 2022-06-13 07:00:46.482769+00 2022-06-13 07:00:46.482769+00 +vw_mwyhnlv1f3g99f ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N 2022-06-13 07:00:46.76622+00 2022-06-13 07:00:46.76622+00 +vw_3lc5xx7fjg3zfp ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N 2022-06-13 07:00:46.889278+00 2022-06-13 07:00:46.889278+00 +vw_0lwyv8ap72h0by ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N 2022-06-13 07:00:47.005135+00 2022-06-13 07:00:47.005135+00 +vw_yv75dsa7wwvj3u ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N 2022-06-13 07:00:50.84102+00 2022-06-13 07:00:50.84102+00 +vw_4awlw6zujst2vm ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N 2022-06-13 07:00:53.172817+00 2022-06-13 07:00:53.172817+00 +vw_xov4el1bqpsgy8 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N 2022-06-13 07:00:54.112375+00 2022-06-13 07:00:54.112375+00 +vw_vdsb71p2zbuors ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 \N 2022-06-13 07:00:55.190126+00 2022-06-13 07:00:55.190126+00 +\. + + +-- +-- Data for Name: nc_hblt___Actor; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public."nc_hblt___Actor" ("Name", "Notes", "Attachments", "Status", "ncRecordId", "ncRecordHash") FROM stdin; +Actor3 Actor notes 3 \N Done rec0FvoEXWLmQUFAw 058bb253c4061e61203caa7d5be2a696f2b26c65 +Actor1 Actor notes 1 \N Todo rec0V0zxSBZ0MseyB 88e9dd595a659d42ac88a4a868540ad6abb44c2d +Actor1 Actor notes 1 \N Todo rec0ZeKT9G0JoSoPc 3491d871797e6695951b97bf0f20fcbc27f6375a +Actor2 Actor notes 2 \N In progress rec0uSfHFyj6vrEL5 67481454232e5b93130eba12735fe165c0a6b1cd +Actor1 Actor notes 1 \N Todo rec1D7aLIRKRzyPoB aca2736d52d28f91363fbd0a77d014db7e1ec76d +Actor1 Actor notes 1 \N Todo rec2ITS9u00D1ElOe 4b2b33e5078e827f4aa7cf4e3e75a23f1d882cf5 +Actor1 Actor notes 1 \N Todo rec2bJf0FfXrXxb1o 883b4e7d1da4e41e37f526b4cdecf4d9ab9951bc +Actor2 Actor notes 2 \N In progress rec3111PeL24b09un 1fb78873df922f54de155b3095e318ad549f5108 +Actor2 Actor notes 2 \N In progress rec39XBA2rhY86qEV 85fafac434bf334a9f27451413ab3b7069658187 +Actor3 Actor notes 3 \N Done rec3Gz7qVmxyg5QZB e6b4ad34e8a91b58ae14871e122a35191a13530d +Actor3 Actor notes 3 \N Done rec3fFOH2yOHyVHpy 23f42119752c015053a71b12f3e324a3e6ceb14a +Actor1 Actor notes 1 \N Todo rec46CYu3d27LO97h 7fc7d80e7822ef346d056f8945457e194fe1bc90 +Actor3 Actor notes 3 \N Done rec49QGAIoBcKGnYR 6dee403f64cdaa512b1d0cd3fb2daf75bb58d18c +Actor3 Actor notes 3 \N Done rec4RFUjLxRxCH81i 3dcfcd09d56e715c1510a22e65d41f9b05d39dd8 +Actor3 Actor notes 3 \N Done rec4W05E1cVl4ZFr9 2d9074b9c4523b24a0df362ca8e37f94a275fd5b +Actor2 Actor notes 2 \N In progress rec4cOht1jqTABdYJ 045e7a6369fc64807abb4fbfeae4a6c03a34ec42 +Actor1 Actor notes 1 \N Todo rec4uWuyNJpCy95FU 5cf3b7a7ff63bf9a7fb12163c2c7102e54f9a8ba +Actor3 Actor notes 3 \N Done rec4yoBrJZstoKQU2 5763c55802c5421431f1d4f9ceb8a0b6ad1dd434 +Actor2 Actor notes 2 \N In progress rec56o1YrJM3J0DBy 96a4258f186f276df6f5b0f369b142bfb77bc33c +Actor2 Actor notes 2 \N In progress rec5dpMRWMCOpLAMi 78135255e07ff9cd956d4d2ad848b8f201b67e35 +Actor1 Actor notes 1 \N Todo rec5i2JENrmFxXTyi a6ba6c6e0f381c88923cb8a449212f10922ca559 +Actor1 Actor notes 1 \N Todo rec5yvzC9lLtw0KJX 4cc499379c7828fa6bef5d620b02875a5bad6834 +Actor2 Actor notes 2 \N In progress rec64hkgWxUM9PkAA 29c4d12a91059895b415144bef39e5edfc890f17 +Actor1 Actor notes 1 \N Todo rec6BwSzdAs2NA0mM 647f5343a4ada287d081c7916030fb4e7c4b2a72 +Actor3 Actor notes 3 \N Done rec6YDus4TCCdIhtP e6599fca8c04badbd960c22a8eeb37b19b0297d7 +Actor2 Actor notes 2 \N In progress rec7u1bgQ7deGqDBJ e15c1fc411306dfc84e022a403cb8edbf0270890 +Actor2 Actor notes 2 \N In progress rec8GtDGX0r0aSUmZ eaa80ad884e53fe365bc2078f7e6b45852b9ac1c +Actor2 Actor notes 2 \N In progress rec8HHJRlguTmyZmr 02ef1f7e6c6a5288584df60593f888d0cf79d748 +Actor3 Actor notes 3 \N Done rec8kCifIZcU2GCPq 11b2d968a4bfd649d9a9bd55d924ae5ad4367c99 +Actor3 Actor notes 3 \N Done rec96jCh0XHHKgBC2 ba47eb8751dfb9ee554592452754e75f9c71bfbf +Actor1 Actor notes 1 \N Todo rec9J0VShrSuDvMxW d66b02424401ec489a951a84a82abd9f73baa1b0 +Actor3 Actor notes 3 \N Done rec9ZogzXciL93exN 7f98c427ff6a880354d044d69e667efe2615c6f1 +Actor2 Actor notes 2 \N In progress recAGJ1QI0dmDGjSE 331bdc34a1fdf629754b0529bcdf01125115b274 +Actor2 Actor notes 2 \N In progress recAUh1LXvf9YBKT8 2dc2537b8b0a702fd0e2e341d7ffb131f3cf8d68 +Actor1 Actor notes 1 \N Todo recArWjtWwaH4TqHT d1e5a3db8b02f785a762f61e6ef0fa41f859c5a9 +Actor3 Actor notes 3 \N Done recAz1AskwK05sL3O 3142c26eefadde35e0fa9d7ffd694f106e2cbd61 +Actor3 Actor notes 3 \N Done recBDYZwxZuHlba8N cd1b37751b3151424ad29e89a20cc292c4c74bf7 +Actor2 Actor notes 2 \N In progress recC5DAUejwpPydmg f5e66277fed9e9b91e6933ba9c31c677cf5d6a46 +Actor3 Actor notes 3 \N Done recCIOJeHew0T6Iy9 41208f987604803f82e6cae9cef309644af1781a +Actor2 Actor notes 2 \N In progress recCNh8VtGFBgvaRz 1e915ed9da5d5d98ac6e543a96e516ef6abb2c49 +Actor3 Actor notes 3 \N Done recCQozCSDbuWDBtS 95604128bb919b443fb73a7d2cf656b454011506 +Actor1 Actor notes 1 \N Todo recCRzc9ECwbehYvX b48509ffeb133032607938016ea2ee0a7a193a59 +Actor3 Actor notes 3 \N Done recCTKCKBT1qeibP1 eb672f38940525a8d113cf5220cc13a0f4f3b2fd +Actor2 Actor notes 2 \N In progress recCnI7OZM6WQd055 055cfa5af65ca46c6b89b2b796c858e96ff0a755 +Actor1 Actor notes 1 \N Todo recCnUhOCubTxxqN3 6d6ac028cbd8165b7b2dfc00d9d288044d6d42d9 +Actor3 Actor notes 3 \N Done recCr0Ffe1MeHNneQ 82d08de7a35093dfb63485c0fc4ef6e6c8982adc +Actor2 Actor notes 2 \N In progress recCt3k3j45MNu8jo c7dfcbd2c72a6f87adf2958dfa7342acc4cf9df3 +Actor3 Actor notes 3 \N Done recCt4jqAZvzphPoY 47fe0bca203b5cc9e22de1da1f1fc13e70df55bb +Actor2 Actor notes 2 \N In progress recD8sJe7mGqfWAIy 69dff8c1f2c9f25f6b8f914aa4ee681a795e5e15 +Actor2 Actor notes 2 \N In progress recDeTFYDBvc2Z7uA 4e9934c2ded5ceca7a4cc3495c6e2324d064f4f0 +Actor2 Actor notes 2 \N In progress recEAH1Tt9UmzEn4g 6e2962d748cd286249827a02954caa436f4c6a91 +Actor3 Actor notes 3 \N Done recERARHbh0c9Ky1K 9e76d6ebf64d54176bcb4e557d70202a207e0bbf +Actor2 Actor notes 2 \N In progress recEn3Jt0Q3jUkrnA 47a90b7a138806cbc1db5aa0a01fcd9fc343941e +Actor1 Actor notes 1 \N Todo recErHa5t2ObPb7WG e5f124b1ef260234d903b47ddba2321a263b4020 +Actor1 Actor notes 1 \N Todo recFgM5lSLMJ3TeQJ ad90e5f9de986f59c49d6846042c6379fbeb47c7 +Actor3 Actor notes 3 \N Done recG57T4qX2yQjeZ3 6ee6dd0582aac9f50cdc36fe6b27459d225703c2 +Actor2 Actor notes 2 \N In progress recGFnlB5Gil5Rko7 e0fe39dd966d51b4a7ad6b0bbcbfe3dd8fcbbf4c +Actor1 Actor notes 1 \N Todo recHYPx1nffn7ixpu a8e4160e46f8322c85b7d77810fa04b443cbb760 +Actor2 Actor notes 2 \N In progress recHfp3CsU6nD0aZB 5eb23a841d8413cdfe610f436d24af94b5e720db +Actor2 Actor notes 2 \N In progress recICTNunnjH1nGhQ 0e11af149f76a94a4826ac15cfb6bd8946484bcf +Actor1 Actor notes 1 \N Todo recIDKRGK5eUjvPJ5 a313de822c6ae5cf647b9238d8a232c708be7164 +Actor3 Actor notes 3 \N Done recINXG0bzWvS2OoD 8a0973f0fd171a9d97a8cd2cb37f7ee3a307af7f +Actor3 Actor notes 3 \N Done recIk7tXHdmSDNG6Z e780ff3f7936cf9bc21724877f01aaca886df365 +Actor1 Actor notes 1 \N Todo recIulEH9NzmIIxJF 2c64b8375705d76073c0d563171a4b35db7f421d +Actor1 Actor notes 1 \N Todo recJP30B8nKbRkIt1 fb83834d9c1079c7c1cd50b3201faa298639f43c +Actor1 Actor notes 1 \N Todo recJYqnnmSykWqStj 999edf5546ef602c5e286b33be37ec1deb5b382c +Actor2 Actor notes 2 \N In progress recJcm8KkP9vkWi3I 1c3f780dff314f9fa77046e59fe33fba3bcab98e +Actor3 Actor notes 3 \N Done recJhuHnRcZZG5fEZ bd3513caaca13a753392edce91f2cd190e5466a3 +Actor1 Actor notes 1 \N Todo recK6mxq2iZr3RXSq add789db424f595f29d772f7ad3b048aac14f31a +Actor2 Actor notes 2 \N In progress recKFJhZ9ODiymkuR ba627982d23449d54aea92ee9b709ce0d0ea19b7 +Actor3 Actor notes 3 \N Done recKZL5MowA1NsVvn ab55e3a4275b912ae7fe498977c23e82a31b4e3f +Actor1 Actor notes 1 \N Todo recKljYPAGWceTBNH 06c9190218171fd72ee88d22164aaa7f5ba53f75 +Actor2 Actor notes 2 \N In progress recLBrOWsUpp7qvgE bfb0c6cd66d987f3ce305275d0c23bdc87017dad +Actor3 Actor notes 3 \N Done recLDPN7Vgngo2dTh d304b1dc6911ba907c677812e8693120c0c21dab +Actor3 Actor notes 3 \N Done recLFWbi4c8yTLx80 d737ad6a553fc58961c4fd6c15b2449d5052a531 +Actor1 Actor notes 1 \N Todo recNJ4JrkGtqZOhAv 0df01f7529c666d82137b292a4f5b20b778fe3dd +Actor3 Actor notes 3 \N Done recNPYtn6vUiM6okR cad941be6e82787eda1d1ee9c246703fb10cd595 +Actor3 Actor notes 3 \N Done recNTncuKqBYo7LrU d9fc4d7913303b4ff97d63d3299b2096bd8d54f2 +Actor3 Actor notes 3 \N Done recOJsmmUudeE29Ue cf8744390d10e9e8a32680fbefba9665a848c779 +Actor3 Actor notes 3 \N Done recOLB1WhYHqK74SS 157d15d261ec52caeb45fe159b7cfb4d88083658 +Actor3 Actor notes 3 \N Done recOW86Ggx66FXwjB 1f8bf8fbf1e39750eb523238df6cefb65229f001 +Actor1 Actor notes 1 \N Todo recOjAGiJssXRCa30 c54aefcbbb62a7185610fc831880e29ae9f524c1 +Actor1 Actor notes 1 \N Todo recPGC8odDltpgn0K c6036aeee51d2e17bb25747631b821798e6ef359 +Actor2 Actor notes 2 \N In progress recPtflCrx455S5KC 40270e6f138e5bf33c97ca8a30d03cd73d0d31f7 +Actor2 Actor notes 2 \N In progress recPyraZijpepka2B d012e5eedc44fb86a360c83878a5168a137b6b54 +Actor3 Actor notes 3 \N Done recQISAKx6ORHIMQI aa7bacc3da5dfe82b9a9bc1407f86726dc10e043 +Actor3 Actor notes 3 \N Done recQP6oFkH9QgcYas fa0ef0e1a544eb885de79c9630f35772588dd69e +Actor1 Actor notes 1 \N Todo recQYa4q7XITVWSIT d6c16968bb8eef7d5cb9f3c3902fb20eed32fcad +Actor2 Actor notes 2 \N In progress recQx3pvlloMsgm7L 86318d3e52989e5f9444510d37ef5dabfd34ad28 +Actor3 Actor notes 3 \N Done recRSI64PotYR9Z1R 0d6bb0822c495628ba1d177b33d29e3b8432b38b +Actor2 Actor notes 2 \N In progress recS9KDaJX1TkM6gq 4133390311d064fdd5fe804d4ee0ed286fdc64b6 +Actor3 Actor notes 3 \N Done recSHxVFYgRQNNC8D 6c8b6be653a00ce33d62928577b3f10bb7267384 +Actor3 Actor notes 3 \N Done recSPhxiW2u3a3ttq 5550907c3ae21e6d64f3321a937d2bbbf7b3cdfb +Actor2 Actor notes 2 \N In progress recSPiaENCOQQY0m6 f663601678916339c90c021e956b82ebf110a707 +Actor1 Actor notes 1 \N Todo recSbLn19Qx3lMwni d71dd3c8177c05dc389d119c7f30f2160461c3c5 +Actor1 Actor notes 1 \N Todo recT9ZiEFiG9Z7ua8 8996d22b9e8fd3fbf204bd22ee983d8b0f798318 +Actor1 Actor notes 1 \N Todo recUECi299uqoK0Zz 801d041657c1bb972eeee47281cebb0b77a0331d +Actor1 Actor notes 1 \N Todo recUPTKkNb3LiSVuR 0173b41f1e69de36f32ae3ec4b6321aa435c6e4e +Actor1 Actor notes 1 \N Todo recUsM3jmCQy4hJXQ 385626a1122213ae913c47e2c21adb3ba75265a5 +Actor2 Actor notes 2 \N In progress recWcY0kwgD1A9pY3 8cecbadcb5adef97991fbb923c5d69cfed990824 +Actor3 Actor notes 3 \N Done recWdQAq8LMoTYUu9 444bbb5a19f6ea8ad087284e1488dfccec5c076b +Actor2 Actor notes 2 \N In progress recWkViRzF3Vr9J5m ffb440873a8204453408aeb628445921a0c39f82 +Actor2 Actor notes 2 \N In progress recWnCqL6DwQBGtLh 797cfe0e9b282e58afc724f87579818cfbe3b633 +Actor3 Actor notes 3 \N Done recWyQV30cBEitbjS c8ba611666ea8e88f6de4b81b3cb74238c1d71cb +Actor1 Actor notes 1 \N Todo recWyzzFcRGXCcSyY 000542675e8fd7cb1926493a2e1aca0e091e2537 +Actor1 Actor notes 1 \N Todo recX9a4u4mohTxYLR 9529662eb3e150c486a2ee08f97fc2d2b1cbe509 +Actor2 Actor notes 2 \N In progress recXcDldaYwCEGl2b b8012790bbff8b4d7916eae1b97ce4ac42b95ef5 +Actor2 Actor notes 2 \N In progress recXudVaHPdAA7yc7 3c69735bcdc6d2fd8e10745e120b04006e637bca +Actor3 Actor notes 3 \N Done recYoEC4c9kUjtfyh 9eda4483eae2ccaccfca8a34cecd06537d731659 +Actor3 Actor notes 3 \N Done recZ8HtJANS20fPqg 00871b9e689a4af2b7d5aea038c2923c6d680cf6 +Actor2 Actor notes 2 \N In progress recZGBOu8Zz56WkIw ea35fdc9213928864f4d280b2fda257296056f28 +Actor2 Actor notes 2 \N In progress recZXsFDWO9bF9M4Y ebb40e01b970126ce6e4ede61519b3de62552efe +Actor2 Actor notes 2 \N In progress recZivinZmr88QP7E 2625bf1a077b88100fee09e5ad4a033a5483af95 +Actor3 Actor notes 3 \N Done reca4j92PDccvFa3d 9436aa84e01f2a6791645de34dca33d329e4d59f +Actor1 Actor notes 1 \N Todo reca9StujGi0tq48Q 59056a186e2d4bd458b52c0f84ed6ab8e2b90b1a +Actor1 Actor notes 1 \N Todo recaGNVrylKrsffqb d81cd9de6b03749c53caeec4e5c744f6044807df +Actor2 Actor notes 2 \N In progress recaYgxn0yRHtntmz fd1daf59072ad952c35f7d99114b069551c9df65 +Actor2 Actor notes 2 \N In progress recan3MvhgoEUXzy8 40b9a4f34a80ccc2da7412b0efd0e7a17728833a +Actor3 Actor notes 3 \N Done recb93c35fh70MBJw 24efb2d9fa05d7f0a76e19ebe35ff60f6facc80e +Actor2 Actor notes 2 \N In progress recbFS86I0RGUVZue ba28f96906b5fa8f8573d8a5fa442d23788b2442 +Actor1 Actor notes 1 \N Todo recbc04ZlvL1HAdAC d04b4480a574daba1be27595df7ce2bb6ab6900c +Actor1 Actor notes 1 \N Todo recbcPHkstaDfQGXM 85f056b889108db5599fdce1a7bd87786330ac71 +Actor2 Actor notes 2 \N In progress recbmSsPcZQsjcNfl 1ff46b705c8fd26cea0388e848a80efc1df29b77 +Actor1 Actor notes 1 \N Todo recbqXXj7FkoEtMq1 69b87453f1e53a813015a671f88696855d7f7d8a +Actor1 Actor notes 1 \N Todo reccBNoimgzxU5BMp 9eb4f0e6921a39f88c7be8b276558b16b3b7b536 +Actor3 Actor notes 3 \N Done recdGwEzLXf74Ow8f c25af565b642f65279f3c014a4410ecee9f1aa16 +Actor3 Actor notes 3 \N Done rece7uNeWPW2xbhSO ba98c5a19ef65da57b5fc13c7c56db9d99ff2334 +Actor1 Actor notes 1 \N Todo receD9xa1dVv5BcDQ b1eb95c7746ec42aeebb0977af85f14e3d07d175 +Actor1 Actor notes 1 \N Todo receSHjagBxYQovYI 3f4606c99c312fa85d23bbd45ae33af5f5131e20 +Actor1 Actor notes 1 \N Todo recfAHXC33ItgftrL e315472c67c993e4046d1c9ff04c7e3ac6607611 +Actor1 Actor notes 1 \N Todo recfzdCeC2VlNh52u 067f3e95be61be4ad4fa5dbf4c4b518bcfbfc5f0 +Actor1 Actor notes 1 \N Todo recgbtBaHkGDi4bQf 262fd820597e15836864a2ad919f1b59c9bfabd0 +Actor2 Actor notes 2 \N In progress rechKDdlD52WiD7NK b742f285137fcacf2c6c2fb582edc3297a49c6fa +Actor3 Actor notes 3 \N Done rechbcF8A0tzQa586 090ae5bba3144bcb8cfceb1be6ada0aa051183c8 +Actor3 Actor notes 3 \N Done rechmjOCelOZxbmBa c8057b7a0c2cd37e771e92ba1258ab19cdc44c11 +Actor2 Actor notes 2 \N In progress rechp0RG7K6hewA1M 41f00dfc6e7b1f94d7f29d89d1f37e070ea07a97 +Actor3 Actor notes 3 \N Done reciK4etiDU9J0UOx b0c7e938e8997f6792465f6545c2bcb8a1680881 +Actor2 Actor notes 2 \N In progress reciOPJPGCJ5MxtfZ d4e5751ef9fe546c94d812a6644f1a02c6051d29 +Actor2 Actor notes 2 \N In progress recicPEOZLwBH8v5U 7a749de9e3496567d1e86ea51769e6914819a40d +Actor1 Actor notes 1 \N Todo recikRIhnQY1yaPcm 0d9d61437bbe91bd49498d4ea84395e52222caef +Actor3 Actor notes 3 \N Done recimhgHAFy7JLLp7 374b05f13280d9b6e6f5335ccf3fe09562785d84 +Actor1 Actor notes 1 \N Todo recir7x2WnraYjfnG b6cecfc3c938b1525a26cdfc8ede58da8de3ba3b +Actor2 Actor notes 2 \N In progress recj7StYCiuEnegHE f42a895be8b865b8a6a6593ac27a044feb1b9f2b +Actor3 Actor notes 3 \N Done recjeEEkNsL9f6MMD da23661a2e1f026c319fd57ad38c4e66128ae6b3 +Actor3 Actor notes 3 \N Done recjhbevn3JGMfI2r 1d4def7893b31f41426092667dac365080a07cc1 +Actor2 Actor notes 2 \N In progress recjio09ePRyCB7KN 354d9484ab72063bbf24561cf71e78632f6c43fb +Actor1 Actor notes 1 \N Todo recjjiGCVNJAkw9wd 403f867962a05498e29601a47c1973d9b0564f02 +Actor1 Actor notes 1 \N Todo reckn0Pqft1m6j82h aa1f53206218872e6b7f2881035d60938c8a61c0 +Actor2 Actor notes 2 \N In progress reckvinBkqakWxGb1 1d97f3572fac9bb47fa76dab371d4fa00245f460 +Actor1 Actor notes 1 \N Todo reclss5s1jQ40XVKk ae36ad2fecc654070424ae92d639aa2aef5f4359 +Actor3 Actor notes 3 \N Done reclvjByuuqrNdfGh 8056375d11076fb1176fdfddc4a73689a03dd7a0 +Actor2 Actor notes 2 \N In progress reclzPtDX6s7zo4vM e32ef2917df59069f95b4de8481252fa65bad7ab +Actor1 Actor notes 1 \N Todo recmWFFXkDP69clX0 ee5a57e2eb6c786b9156c6a86655c8ceb76fdd02 +Actor3 Actor notes 3 \N Done recn5BqtUsXeFC2Mu 8f76e2ae38ec3be06fad721a00014c9d4ccf0e3f +Actor1 Actor notes 1 \N Todo recnMjD7cSuhoAPUC 7fad1f7fdfce028668ea2c26a25e3a50ca868e3a +Actor1 Actor notes 1 \N Todo recndbLBIOryTTdCZ 49b5f94fdc25e6fce8c6782161522ab56e1a25f7 +Actor1 Actor notes 1 \N Todo recnvEu1dZcDEsVKB 9cd646a1fb7858a6ba5dc3af1a03c852590ba9b5 +Actor2 Actor notes 2 \N In progress recoOVjRguYLbXZ1v 1cab16d7071432d9ae2c1e67ef2c47fcf85b008b +Actor2 Actor notes 2 \N In progress recozu4rnA68IjD0C 2f9ce260e07fa9875816e4e946b56c5a254596dc +Actor3 Actor notes 3 \N Done recpMXkMYXYJnso57 ce00d1632867e3ed6b8962fec5e7998ed0e6b1a2 +Actor2 Actor notes 2 \N In progress recpZV0AkuEzIvSLO 21450d9a00c5a76a2b26577ae8644aeb80c6e889 +Actor2 Actor notes 2 \N In progress recpzXPCWJ6UVY1nw 4cc87d312634e435df6b8a4447db73923455c456 +Actor3 Actor notes 3 \N Done recq3EYAwBxE0hfBk a9884fb0843e61e4fd150e378f0a94b1db596470 +Actor2 Actor notes 2 \N In progress recqSX39ycFt5cbit 810a535e5aba4c8c17c114206c4f376dcf03933f +Actor1 Actor notes 1 \N Todo recqaG9faPOCSAQZP c8d8e40b7c61962f2eedfb52f5f2ac6f66788dba +Actor2 Actor notes 2 \N In progress recr4e6NJe2H6QOti f1e3cf7200af94d6910e636bd24a0c955dd3ca61 +Actor1 Actor notes 1 \N Todo recrG4A7Saf74DYLq f074887dfcf130d5669791e2a5247768a41ecad3 +Actor1 Actor notes 1 \N Todo recrHsizoUnUaqQH9 1708be8fc90b69d650b1dc46f56eced962721124 +Actor1 Actor notes 1 \N Todo recrUlQn7h6awkiMh d87fcae7ffd8a31e75e8c52ac0cc21df5e889c74 +Actor3 Actor notes 3 \N Done recrZVyF0LSasmjxA f21d096d65ef3a610cc167a965bf311f541e1d3a +Actor3 Actor notes 3 \N Done recrsbYvD0QEaxLSn 4fc12f532f235f9c62aabac5b5f73c37c02d9c76 +Actor2 Actor notes 2 \N In progress recsF28VvaV0LJoJ7 71559c328d8fb4f0dd6830f4a7937cb3986b283c +Actor3 Actor notes 3 \N Done recsfO9R7mIhCQCTT 360a31ed08adea1b5fdf55b6be7325b22dde6f0b +Actor3 Actor notes 3 \N Done recsp4bBpryR5mo3a ee525da5969b6aeb3f1c254064c4fb1145871268 +Actor1 Actor notes 1 \N Todo rectGhRfa80hvIwMX 882ab92eb70f9556d8d81fccb4a08b06d3796605 +Actor2 Actor notes 2 \N In progress rectZsMm3HDl3xzay 4f013e27265e7a7880721005adc78d73f2761355 +Actor3 Actor notes 3 \N Done recvN8nBybJ7T53mI 27b7fc2fc1881f106c026da0ab7bf8ee08125adb +Actor1 Actor notes 1 \N Todo recvVDqzflqs1D877 5464eef4e79e57479e68020f939806c049d25016 +Actor2 Actor notes 2 \N In progress recvhfGjuAZJd3T8N ae852f40a44af9542b8ea70e19811718fe0cbcfd +Actor2 Actor notes 2 \N In progress recvpeQ9dN4MsllMP 7d935b964decf6f24aa0c77da9624e49e1dc678f +Actor1 Actor notes 1 \N Todo recw76j0sxOeMdlzw decd4583a545ce2ad9984a0fe8e1614f13ab3ccb +Actor3 Actor notes 3 \N Done recw92Q2wm4jcjaeU 7bf80bfb3acadad04632d660a26676bdb4e6d7b4 +Actor3 Actor notes 3 \N Done recxb3F5weFRUGfLN dfec1b52065657193911aa3218ddf200608c8951 +Actor2 Actor notes 2 \N In progress recxvxbuW60sljjYs b1d2dd82b4766221b724a7945605e714acd883f3 +Actor2 Actor notes 2 \N In progress recyLD3N4GWjrCE66 d15b32c94b5d249c94feab53d20bac4be275559d +Actor1 Actor notes 1 \N Todo recySw7jDQymHVrHb 45da7c3bfc42a9de2b295ec6680ae8e7ecde00b9 +Actor1 Actor notes 1 \N Todo recyW7mXxCyYF8PlO d270d37ff43631f69fc1387cf1f8f91976745fff +Actor1 Actor notes 1 \N Todo recyYBlsEY2RKbI9y d7831472963f4fe47de95e02cdb13f150cfd508a +Actor3 Actor notes 3 \N Done recyehnr9372Y3ZS2 97a0693d66b294b7090d89e4bf19faece3008a43 +Actor2 Actor notes 2 \N In progress reczSGYrzGziNwNnI 938586ff04b462290f18550d15788ef5dde0f7c7 +Actor3 Actor notes 3 \N Done reczUvQqDCSFTiPGi 6a149e24a7081288e909c5972accc31339d8ca28 +Actor3 Actor notes 3 \N Done reczcAe4o99yVsr6Y 956a8a0acd8e21fe5580164f4bfe96e5553b57d4 +\. + + +-- +-- Data for Name: nc_hblt___Film; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public."nc_hblt___Film" ("Name", "Notes", "Attachments", "Status", "Done", "Tags", "Date", "Phone", "Email", "URL", "Number", "Value", "Percent", "Duration", "Rating", "ncRecordId", "ncRecordHash") FROM stdin; +Movie-1 Good \N Todo t Jan 2022-05-31 123123123 a@b.com www.a.com 1 1.00 0.0100000000000000002 60 1 recVZbncEgT9VOzxR 040f240b631f9a0ac489fc879403c8b3e6d39a4c +Movie-3 Ugly \N Done t Apr,May,Jun 2022-06-02 456456456 c@b.com www.c.com 3 3.00 0.0299999999999999989 180 3 recnrlGC3AHbYQRh8 44e83c594d7f2ad6244e3b5b3722cf4bc72c5743 +Movie-2 Bad \N In progress \N Feb,Mar 2022-06-01 234234234 b@b.com www.b.com 2 2.00 0.0200000000000000004 120 2 recxxtP9pVtsCoGzo 8750d52276273d72d6ba09c88c1c687c3ea07ef3 +\. + + +-- +-- Data for Name: nc_hblt___Producer; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public."nc_hblt___Producer" ("Name", "Notes", "Attachments", "Status", "ncRecordId", "ncRecordHash", "nc_hblt___Film_id") FROM stdin; +P1 Notes of P1 \N Todo recQI4iMKMH2yLG0g 5b416c9c1b9469ae47ac75895a67bf53b9fdc924 recVZbncEgT9VOzxR +P3 Notes of P3 \N Done recU3dmwXgYNNyiyx c46146d9e5124d1a769409469b009d9063e6fc71 recnrlGC3AHbYQRh8 +P2 Notes of P2 \N In progress recur5QvQMadDopIk e4e5ba3c7e106d3b503ded219aaddfab03a9e554 recVZbncEgT9VOzxR +\. + + +-- +-- Data for Name: nc_hblt___nc_m2m__9oevq0x2z; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_hblt___nc_m2m__9oevq0x2z (table2_id, table1_id) FROM stdin; +rec4uWuyNJpCy95FU recVZbncEgT9VOzxR +recqSX39ycFt5cbit recVZbncEgT9VOzxR +recnvEu1dZcDEsVKB recVZbncEgT9VOzxR +recD8sJe7mGqfWAIy recVZbncEgT9VOzxR +recir7x2WnraYjfnG recVZbncEgT9VOzxR +recEn3Jt0Q3jUkrnA recVZbncEgT9VOzxR +rec2ITS9u00D1ElOe recVZbncEgT9VOzxR +recWkViRzF3Vr9J5m recVZbncEgT9VOzxR +recmWFFXkDP69clX0 recVZbncEgT9VOzxR +reciOPJPGCJ5MxtfZ recVZbncEgT9VOzxR +recbcPHkstaDfQGXM recVZbncEgT9VOzxR +rec39XBA2rhY86qEV recVZbncEgT9VOzxR +rec5i2JENrmFxXTyi recVZbncEgT9VOzxR +recZXsFDWO9bF9M4Y recVZbncEgT9VOzxR +recbqXXj7FkoEtMq1 recVZbncEgT9VOzxR +rec4cOht1jqTABdYJ recVZbncEgT9VOzxR +rectGhRfa80hvIwMX recVZbncEgT9VOzxR +rec8GtDGX0r0aSUmZ recVZbncEgT9VOzxR +recWyzzFcRGXCcSyY recVZbncEgT9VOzxR +recQx3pvlloMsgm7L recVZbncEgT9VOzxR +recfAHXC33ItgftrL recVZbncEgT9VOzxR +recJcm8KkP9vkWi3I recVZbncEgT9VOzxR +recgbtBaHkGDi4bQf recVZbncEgT9VOzxR +recKFJhZ9ODiymkuR recVZbncEgT9VOzxR +recX9a4u4mohTxYLR recVZbncEgT9VOzxR +recvpeQ9dN4MsllMP recVZbncEgT9VOzxR +recCRzc9ECwbehYvX recVZbncEgT9VOzxR +recr4e6NJe2H6QOti recVZbncEgT9VOzxR +recOjAGiJssXRCa30 recVZbncEgT9VOzxR +recsF28VvaV0LJoJ7 recVZbncEgT9VOzxR +recySw7jDQymHVrHb recVZbncEgT9VOzxR +recAUh1LXvf9YBKT8 recVZbncEgT9VOzxR +recHYPx1nffn7ixpu recVZbncEgT9VOzxR +reckvinBkqakWxGb1 recVZbncEgT9VOzxR +recrG4A7Saf74DYLq recVZbncEgT9VOzxR +recozu4rnA68IjD0C recVZbncEgT9VOzxR +recUPTKkNb3LiSVuR recVZbncEgT9VOzxR +recEAH1Tt9UmzEn4g recVZbncEgT9VOzxR +recUsM3jmCQy4hJXQ recVZbncEgT9VOzxR +rechp0RG7K6hewA1M recVZbncEgT9VOzxR +recnMjD7cSuhoAPUC recVZbncEgT9VOzxR +recj7StYCiuEnegHE recVZbncEgT9VOzxR +recJP30B8nKbRkIt1 recVZbncEgT9VOzxR +recxvxbuW60sljjYs recVZbncEgT9VOzxR +recIulEH9NzmIIxJF recVZbncEgT9VOzxR +recGFnlB5Gil5Rko7 recVZbncEgT9VOzxR +receD9xa1dVv5BcDQ recVZbncEgT9VOzxR +recicPEOZLwBH8v5U recVZbncEgT9VOzxR +recndbLBIOryTTdCZ recVZbncEgT9VOzxR +recLBrOWsUpp7qvgE recVZbncEgT9VOzxR +recIDKRGK5eUjvPJ5 recVZbncEgT9VOzxR +recaYgxn0yRHtntmz recVZbncEgT9VOzxR +rec6BwSzdAs2NA0mM recVZbncEgT9VOzxR +recCt3k3j45MNu8jo recVZbncEgT9VOzxR +recbc04ZlvL1HAdAC recVZbncEgT9VOzxR +recvhfGjuAZJd3T8N recVZbncEgT9VOzxR +recaGNVrylKrsffqb recVZbncEgT9VOzxR +recpZV0AkuEzIvSLO recVZbncEgT9VOzxR +reclss5s1jQ40XVKk recVZbncEgT9VOzxR +recpzXPCWJ6UVY1nw recVZbncEgT9VOzxR +recrHsizoUnUaqQH9 recVZbncEgT9VOzxR +recHfp3CsU6nD0aZB recVZbncEgT9VOzxR +rec9J0VShrSuDvMxW recVZbncEgT9VOzxR +recoOVjRguYLbXZ1v recVZbncEgT9VOzxR +reca9StujGi0tq48Q recVZbncEgT9VOzxR +rechKDdlD52WiD7NK recVZbncEgT9VOzxR +rec46CYu3d27LO97h recVZbncEgT9VOzxR +recXcDldaYwCEGl2b recVZbncEgT9VOzxR +recvVDqzflqs1D877 recVZbncEgT9VOzxR +recZivinZmr88QP7E recVZbncEgT9VOzxR +recUECi299uqoK0Zz recVZbncEgT9VOzxR +recPyraZijpepka2B recVZbncEgT9VOzxR +rec2bJf0FfXrXxb1o recVZbncEgT9VOzxR +recAGJ1QI0dmDGjSE recVZbncEgT9VOzxR +recJYqnnmSykWqStj recVZbncEgT9VOzxR +recyLD3N4GWjrCE66 recVZbncEgT9VOzxR +recT9ZiEFiG9Z7ua8 recVZbncEgT9VOzxR +rec3111PeL24b09un recVZbncEgT9VOzxR +rec0ZeKT9G0JoSoPc recVZbncEgT9VOzxR +recbmSsPcZQsjcNfl recVZbncEgT9VOzxR +recK6mxq2iZr3RXSq recVZbncEgT9VOzxR +recPtflCrx455S5KC recVZbncEgT9VOzxR +recErHa5t2ObPb7WG recVZbncEgT9VOzxR +rec7u1bgQ7deGqDBJ recVZbncEgT9VOzxR +recjjiGCVNJAkw9wd recVZbncEgT9VOzxR +recCnI7OZM6WQd055 recVZbncEgT9VOzxR +recKljYPAGWceTBNH recVZbncEgT9VOzxR +recWcY0kwgD1A9pY3 recVZbncEgT9VOzxR +rec5yvzC9lLtw0KJX recVZbncEgT9VOzxR +recDeTFYDBvc2Z7uA recVZbncEgT9VOzxR +recSbLn19Qx3lMwni recVZbncEgT9VOzxR +recjio09ePRyCB7KN recVZbncEgT9VOzxR +reccBNoimgzxU5BMp recVZbncEgT9VOzxR +recSPiaENCOQQY0m6 recVZbncEgT9VOzxR +recyW7mXxCyYF8PlO recVZbncEgT9VOzxR +recICTNunnjH1nGhQ recVZbncEgT9VOzxR +recPGC8odDltpgn0K recVZbncEgT9VOzxR +recS9KDaJX1TkM6gq recVZbncEgT9VOzxR +receSHjagBxYQovYI recVZbncEgT9VOzxR +recC5DAUejwpPydmg recVZbncEgT9VOzxR +recqaG9faPOCSAQZP recVZbncEgT9VOzxR +rec0uSfHFyj6vrEL5 recVZbncEgT9VOzxR +recQYa4q7XITVWSIT recVZbncEgT9VOzxR +recXudVaHPdAA7yc7 recVZbncEgT9VOzxR +rec1D7aLIRKRzyPoB recVZbncEgT9VOzxR +rec64hkgWxUM9PkAA recVZbncEgT9VOzxR +reckn0Pqft1m6j82h recVZbncEgT9VOzxR +reclzPtDX6s7zo4vM recVZbncEgT9VOzxR +recFgM5lSLMJ3TeQJ recVZbncEgT9VOzxR +reczSGYrzGziNwNnI recVZbncEgT9VOzxR +recCnUhOCubTxxqN3 recVZbncEgT9VOzxR +rec56o1YrJM3J0DBy recVZbncEgT9VOzxR +rec0V0zxSBZ0MseyB recVZbncEgT9VOzxR +recWnCqL6DwQBGtLh recVZbncEgT9VOzxR +recikRIhnQY1yaPcm recVZbncEgT9VOzxR +rec8HHJRlguTmyZmr recVZbncEgT9VOzxR +recfzdCeC2VlNh52u recVZbncEgT9VOzxR +recCNh8VtGFBgvaRz recVZbncEgT9VOzxR +recNJ4JrkGtqZOhAv recVZbncEgT9VOzxR +recan3MvhgoEUXzy8 recVZbncEgT9VOzxR +recrUlQn7h6awkiMh recVZbncEgT9VOzxR +rec5dpMRWMCOpLAMi recVZbncEgT9VOzxR +recyYBlsEY2RKbI9y recVZbncEgT9VOzxR +recZGBOu8Zz56WkIw recVZbncEgT9VOzxR +recw76j0sxOeMdlzw recVZbncEgT9VOzxR +rectZsMm3HDl3xzay recVZbncEgT9VOzxR +recArWjtWwaH4TqHT recVZbncEgT9VOzxR +recbFS86I0RGUVZue recVZbncEgT9VOzxR +recAz1AskwK05sL3O recnrlGC3AHbYQRh8 +rec4uWuyNJpCy95FU recnrlGC3AHbYQRh8 +recnvEu1dZcDEsVKB recnrlGC3AHbYQRh8 +reca4j92PDccvFa3d recnrlGC3AHbYQRh8 +recir7x2WnraYjfnG recnrlGC3AHbYQRh8 +rec4RFUjLxRxCH81i recnrlGC3AHbYQRh8 +rec2ITS9u00D1ElOe recnrlGC3AHbYQRh8 +recq3EYAwBxE0hfBk recnrlGC3AHbYQRh8 +recmWFFXkDP69clX0 recnrlGC3AHbYQRh8 +recCTKCKBT1qeibP1 recnrlGC3AHbYQRh8 +recbcPHkstaDfQGXM recnrlGC3AHbYQRh8 +recrsbYvD0QEaxLSn recnrlGC3AHbYQRh8 +rec5i2JENrmFxXTyi recnrlGC3AHbYQRh8 +recOW86Ggx66FXwjB recnrlGC3AHbYQRh8 +recbqXXj7FkoEtMq1 recnrlGC3AHbYQRh8 +recYoEC4c9kUjtfyh recnrlGC3AHbYQRh8 +rectGhRfa80hvIwMX recnrlGC3AHbYQRh8 +recNTncuKqBYo7LrU recnrlGC3AHbYQRh8 +recWyzzFcRGXCcSyY recnrlGC3AHbYQRh8 +rechmjOCelOZxbmBa recnrlGC3AHbYQRh8 +recfAHXC33ItgftrL recnrlGC3AHbYQRh8 +recNPYtn6vUiM6okR recnrlGC3AHbYQRh8 +recgbtBaHkGDi4bQf recnrlGC3AHbYQRh8 +recCt4jqAZvzphPoY recnrlGC3AHbYQRh8 +recX9a4u4mohTxYLR recnrlGC3AHbYQRh8 +reclvjByuuqrNdfGh recnrlGC3AHbYQRh8 +recCRzc9ECwbehYvX recnrlGC3AHbYQRh8 +recG57T4qX2yQjeZ3 recnrlGC3AHbYQRh8 +recOjAGiJssXRCa30 recnrlGC3AHbYQRh8 +rechbcF8A0tzQa586 recnrlGC3AHbYQRh8 +recySw7jDQymHVrHb recnrlGC3AHbYQRh8 +recdGwEzLXf74Ow8f recnrlGC3AHbYQRh8 +recHYPx1nffn7ixpu recnrlGC3AHbYQRh8 +recRSI64PotYR9Z1R recnrlGC3AHbYQRh8 +recrG4A7Saf74DYLq recnrlGC3AHbYQRh8 +reczcAe4o99yVsr6Y recnrlGC3AHbYQRh8 +recUPTKkNb3LiSVuR recnrlGC3AHbYQRh8 +recOJsmmUudeE29Ue recnrlGC3AHbYQRh8 +recUsM3jmCQy4hJXQ recnrlGC3AHbYQRh8 +recERARHbh0c9Ky1K recnrlGC3AHbYQRh8 +recnMjD7cSuhoAPUC recnrlGC3AHbYQRh8 +reciK4etiDU9J0UOx recnrlGC3AHbYQRh8 +recJP30B8nKbRkIt1 recnrlGC3AHbYQRh8 +recZ8HtJANS20fPqg recnrlGC3AHbYQRh8 +recIulEH9NzmIIxJF recnrlGC3AHbYQRh8 +rec0FvoEXWLmQUFAw recnrlGC3AHbYQRh8 +receD9xa1dVv5BcDQ recnrlGC3AHbYQRh8 +recSHxVFYgRQNNC8D recnrlGC3AHbYQRh8 +recndbLBIOryTTdCZ recnrlGC3AHbYQRh8 +rec3fFOH2yOHyVHpy recnrlGC3AHbYQRh8 +recIDKRGK5eUjvPJ5 recnrlGC3AHbYQRh8 +recjhbevn3JGMfI2r recnrlGC3AHbYQRh8 +rec6BwSzdAs2NA0mM recnrlGC3AHbYQRh8 +recCQozCSDbuWDBtS recnrlGC3AHbYQRh8 +recbc04ZlvL1HAdAC recnrlGC3AHbYQRh8 +rec9ZogzXciL93exN recnrlGC3AHbYQRh8 +recaGNVrylKrsffqb recnrlGC3AHbYQRh8 +recINXG0bzWvS2OoD recnrlGC3AHbYQRh8 +reclss5s1jQ40XVKk recnrlGC3AHbYQRh8 +recWdQAq8LMoTYUu9 recnrlGC3AHbYQRh8 +recrHsizoUnUaqQH9 recnrlGC3AHbYQRh8 +recb93c35fh70MBJw recnrlGC3AHbYQRh8 +rec9J0VShrSuDvMxW recnrlGC3AHbYQRh8 +rec3Gz7qVmxyg5QZB recnrlGC3AHbYQRh8 +reca9StujGi0tq48Q recnrlGC3AHbYQRh8 +recJhuHnRcZZG5fEZ recnrlGC3AHbYQRh8 +rec46CYu3d27LO97h recnrlGC3AHbYQRh8 +recvN8nBybJ7T53mI recnrlGC3AHbYQRh8 +recvVDqzflqs1D877 recnrlGC3AHbYQRh8 +recsfO9R7mIhCQCTT recnrlGC3AHbYQRh8 +recUECi299uqoK0Zz recnrlGC3AHbYQRh8 +recxb3F5weFRUGfLN recnrlGC3AHbYQRh8 +rec2bJf0FfXrXxb1o recnrlGC3AHbYQRh8 +recCIOJeHew0T6Iy9 recnrlGC3AHbYQRh8 +recJYqnnmSykWqStj recnrlGC3AHbYQRh8 +recn5BqtUsXeFC2Mu recnrlGC3AHbYQRh8 +recT9ZiEFiG9Z7ua8 recnrlGC3AHbYQRh8 +rec6YDus4TCCdIhtP recnrlGC3AHbYQRh8 +rec0ZeKT9G0JoSoPc recnrlGC3AHbYQRh8 +recLDPN7Vgngo2dTh recnrlGC3AHbYQRh8 +recK6mxq2iZr3RXSq recnrlGC3AHbYQRh8 +recjeEEkNsL9f6MMD recnrlGC3AHbYQRh8 +recErHa5t2ObPb7WG recnrlGC3AHbYQRh8 +rec8kCifIZcU2GCPq recnrlGC3AHbYQRh8 +recjjiGCVNJAkw9wd recnrlGC3AHbYQRh8 +recQISAKx6ORHIMQI recnrlGC3AHbYQRh8 +recKljYPAGWceTBNH recnrlGC3AHbYQRh8 +rec4W05E1cVl4ZFr9 recnrlGC3AHbYQRh8 +rec5yvzC9lLtw0KJX recnrlGC3AHbYQRh8 +recpMXkMYXYJnso57 recnrlGC3AHbYQRh8 +recSbLn19Qx3lMwni recnrlGC3AHbYQRh8 +recSPhxiW2u3a3ttq recnrlGC3AHbYQRh8 +reccBNoimgzxU5BMp recnrlGC3AHbYQRh8 +recBDYZwxZuHlba8N recnrlGC3AHbYQRh8 +recyW7mXxCyYF8PlO recnrlGC3AHbYQRh8 +recw92Q2wm4jcjaeU recnrlGC3AHbYQRh8 +recPGC8odDltpgn0K recnrlGC3AHbYQRh8 +recQP6oFkH9QgcYas recnrlGC3AHbYQRh8 +receSHjagBxYQovYI recnrlGC3AHbYQRh8 +recCr0Ffe1MeHNneQ recnrlGC3AHbYQRh8 +recqaG9faPOCSAQZP recnrlGC3AHbYQRh8 +recyehnr9372Y3ZS2 recnrlGC3AHbYQRh8 +recQYa4q7XITVWSIT recnrlGC3AHbYQRh8 +recLFWbi4c8yTLx80 recnrlGC3AHbYQRh8 +rec1D7aLIRKRzyPoB recnrlGC3AHbYQRh8 +recrZVyF0LSasmjxA recnrlGC3AHbYQRh8 +reckn0Pqft1m6j82h recnrlGC3AHbYQRh8 +recIk7tXHdmSDNG6Z recnrlGC3AHbYQRh8 +recFgM5lSLMJ3TeQJ recnrlGC3AHbYQRh8 +recOLB1WhYHqK74SS recnrlGC3AHbYQRh8 +recCnUhOCubTxxqN3 recnrlGC3AHbYQRh8 +recKZL5MowA1NsVvn recnrlGC3AHbYQRh8 +rec0V0zxSBZ0MseyB recnrlGC3AHbYQRh8 +rec4yoBrJZstoKQU2 recnrlGC3AHbYQRh8 +recikRIhnQY1yaPcm recnrlGC3AHbYQRh8 +rec96jCh0XHHKgBC2 recnrlGC3AHbYQRh8 +recfzdCeC2VlNh52u recnrlGC3AHbYQRh8 +recWyQV30cBEitbjS recnrlGC3AHbYQRh8 +recNJ4JrkGtqZOhAv recnrlGC3AHbYQRh8 +recimhgHAFy7JLLp7 recnrlGC3AHbYQRh8 +recrUlQn7h6awkiMh recnrlGC3AHbYQRh8 +rece7uNeWPW2xbhSO recnrlGC3AHbYQRh8 +recyYBlsEY2RKbI9y recnrlGC3AHbYQRh8 +recsp4bBpryR5mo3a recnrlGC3AHbYQRh8 +recw76j0sxOeMdlzw recnrlGC3AHbYQRh8 +reczUvQqDCSFTiPGi recnrlGC3AHbYQRh8 +recArWjtWwaH4TqHT recnrlGC3AHbYQRh8 +rec49QGAIoBcKGnYR recnrlGC3AHbYQRh8 +recqSX39ycFt5cbit recxxtP9pVtsCoGzo +recAz1AskwK05sL3O recxxtP9pVtsCoGzo +recD8sJe7mGqfWAIy recxxtP9pVtsCoGzo +reca4j92PDccvFa3d recxxtP9pVtsCoGzo +recEn3Jt0Q3jUkrnA recxxtP9pVtsCoGzo +rec4RFUjLxRxCH81i recxxtP9pVtsCoGzo +recWkViRzF3Vr9J5m recxxtP9pVtsCoGzo +recq3EYAwBxE0hfBk recxxtP9pVtsCoGzo +reciOPJPGCJ5MxtfZ recxxtP9pVtsCoGzo +recCTKCKBT1qeibP1 recxxtP9pVtsCoGzo +rec39XBA2rhY86qEV recxxtP9pVtsCoGzo +recrsbYvD0QEaxLSn recxxtP9pVtsCoGzo +recZXsFDWO9bF9M4Y recxxtP9pVtsCoGzo +recOW86Ggx66FXwjB recxxtP9pVtsCoGzo +rec4cOht1jqTABdYJ recxxtP9pVtsCoGzo +recYoEC4c9kUjtfyh recxxtP9pVtsCoGzo +rec8GtDGX0r0aSUmZ recxxtP9pVtsCoGzo +recNTncuKqBYo7LrU recxxtP9pVtsCoGzo +recQx3pvlloMsgm7L recxxtP9pVtsCoGzo +rechmjOCelOZxbmBa recxxtP9pVtsCoGzo +recJcm8KkP9vkWi3I recxxtP9pVtsCoGzo +recNPYtn6vUiM6okR recxxtP9pVtsCoGzo +recKFJhZ9ODiymkuR recxxtP9pVtsCoGzo +recCt4jqAZvzphPoY recxxtP9pVtsCoGzo +recvpeQ9dN4MsllMP recxxtP9pVtsCoGzo +reclvjByuuqrNdfGh recxxtP9pVtsCoGzo +recr4e6NJe2H6QOti recxxtP9pVtsCoGzo +recG57T4qX2yQjeZ3 recxxtP9pVtsCoGzo +recsF28VvaV0LJoJ7 recxxtP9pVtsCoGzo +rechbcF8A0tzQa586 recxxtP9pVtsCoGzo +recAUh1LXvf9YBKT8 recxxtP9pVtsCoGzo +recdGwEzLXf74Ow8f recxxtP9pVtsCoGzo +reckvinBkqakWxGb1 recxxtP9pVtsCoGzo +recRSI64PotYR9Z1R recxxtP9pVtsCoGzo +recozu4rnA68IjD0C recxxtP9pVtsCoGzo +reczcAe4o99yVsr6Y recxxtP9pVtsCoGzo +recEAH1Tt9UmzEn4g recxxtP9pVtsCoGzo +recOJsmmUudeE29Ue recxxtP9pVtsCoGzo +rechp0RG7K6hewA1M recxxtP9pVtsCoGzo +recERARHbh0c9Ky1K recxxtP9pVtsCoGzo +recj7StYCiuEnegHE recxxtP9pVtsCoGzo +reciK4etiDU9J0UOx recxxtP9pVtsCoGzo +recxvxbuW60sljjYs recxxtP9pVtsCoGzo +recZ8HtJANS20fPqg recxxtP9pVtsCoGzo +recGFnlB5Gil5Rko7 recxxtP9pVtsCoGzo +rec0FvoEXWLmQUFAw recxxtP9pVtsCoGzo +recicPEOZLwBH8v5U recxxtP9pVtsCoGzo +recSHxVFYgRQNNC8D recxxtP9pVtsCoGzo +recLBrOWsUpp7qvgE recxxtP9pVtsCoGzo +rec3fFOH2yOHyVHpy recxxtP9pVtsCoGzo +recaYgxn0yRHtntmz recxxtP9pVtsCoGzo +recjhbevn3JGMfI2r recxxtP9pVtsCoGzo +recCt3k3j45MNu8jo recxxtP9pVtsCoGzo +recCQozCSDbuWDBtS recxxtP9pVtsCoGzo +recvhfGjuAZJd3T8N recxxtP9pVtsCoGzo +rec9ZogzXciL93exN recxxtP9pVtsCoGzo +recpZV0AkuEzIvSLO recxxtP9pVtsCoGzo +recINXG0bzWvS2OoD recxxtP9pVtsCoGzo +recpzXPCWJ6UVY1nw recxxtP9pVtsCoGzo +recWdQAq8LMoTYUu9 recxxtP9pVtsCoGzo +recHfp3CsU6nD0aZB recxxtP9pVtsCoGzo +recb93c35fh70MBJw recxxtP9pVtsCoGzo +recoOVjRguYLbXZ1v recxxtP9pVtsCoGzo +rec3Gz7qVmxyg5QZB recxxtP9pVtsCoGzo +rechKDdlD52WiD7NK recxxtP9pVtsCoGzo +recJhuHnRcZZG5fEZ recxxtP9pVtsCoGzo +recXcDldaYwCEGl2b recxxtP9pVtsCoGzo +recvN8nBybJ7T53mI recxxtP9pVtsCoGzo +recZivinZmr88QP7E recxxtP9pVtsCoGzo +recsfO9R7mIhCQCTT recxxtP9pVtsCoGzo +recPyraZijpepka2B recxxtP9pVtsCoGzo +recxb3F5weFRUGfLN recxxtP9pVtsCoGzo +recAGJ1QI0dmDGjSE recxxtP9pVtsCoGzo +recCIOJeHew0T6Iy9 recxxtP9pVtsCoGzo +recyLD3N4GWjrCE66 recxxtP9pVtsCoGzo +recn5BqtUsXeFC2Mu recxxtP9pVtsCoGzo +rec3111PeL24b09un recxxtP9pVtsCoGzo +rec6YDus4TCCdIhtP recxxtP9pVtsCoGzo +recbmSsPcZQsjcNfl recxxtP9pVtsCoGzo +recLDPN7Vgngo2dTh recxxtP9pVtsCoGzo +recPtflCrx455S5KC recxxtP9pVtsCoGzo +recjeEEkNsL9f6MMD recxxtP9pVtsCoGzo +rec7u1bgQ7deGqDBJ recxxtP9pVtsCoGzo +rec8kCifIZcU2GCPq recxxtP9pVtsCoGzo +recCnI7OZM6WQd055 recxxtP9pVtsCoGzo +recQISAKx6ORHIMQI recxxtP9pVtsCoGzo +recWcY0kwgD1A9pY3 recxxtP9pVtsCoGzo +rec4W05E1cVl4ZFr9 recxxtP9pVtsCoGzo +recDeTFYDBvc2Z7uA recxxtP9pVtsCoGzo +recpMXkMYXYJnso57 recxxtP9pVtsCoGzo +recjio09ePRyCB7KN recxxtP9pVtsCoGzo +recSPhxiW2u3a3ttq recxxtP9pVtsCoGzo +recSPiaENCOQQY0m6 recxxtP9pVtsCoGzo +recBDYZwxZuHlba8N recxxtP9pVtsCoGzo +recICTNunnjH1nGhQ recxxtP9pVtsCoGzo +recw92Q2wm4jcjaeU recxxtP9pVtsCoGzo +recS9KDaJX1TkM6gq recxxtP9pVtsCoGzo +recQP6oFkH9QgcYas recxxtP9pVtsCoGzo +recC5DAUejwpPydmg recxxtP9pVtsCoGzo +recCr0Ffe1MeHNneQ recxxtP9pVtsCoGzo +rec0uSfHFyj6vrEL5 recxxtP9pVtsCoGzo +recyehnr9372Y3ZS2 recxxtP9pVtsCoGzo +recXudVaHPdAA7yc7 recxxtP9pVtsCoGzo +recLFWbi4c8yTLx80 recxxtP9pVtsCoGzo +rec64hkgWxUM9PkAA recxxtP9pVtsCoGzo +recrZVyF0LSasmjxA recxxtP9pVtsCoGzo +reclzPtDX6s7zo4vM recxxtP9pVtsCoGzo +recIk7tXHdmSDNG6Z recxxtP9pVtsCoGzo +reczSGYrzGziNwNnI recxxtP9pVtsCoGzo +recOLB1WhYHqK74SS recxxtP9pVtsCoGzo +rec56o1YrJM3J0DBy recxxtP9pVtsCoGzo +recKZL5MowA1NsVvn recxxtP9pVtsCoGzo +recWnCqL6DwQBGtLh recxxtP9pVtsCoGzo +rec4yoBrJZstoKQU2 recxxtP9pVtsCoGzo +rec8HHJRlguTmyZmr recxxtP9pVtsCoGzo +rec96jCh0XHHKgBC2 recxxtP9pVtsCoGzo +recCNh8VtGFBgvaRz recxxtP9pVtsCoGzo +recWyQV30cBEitbjS recxxtP9pVtsCoGzo +recan3MvhgoEUXzy8 recxxtP9pVtsCoGzo +recimhgHAFy7JLLp7 recxxtP9pVtsCoGzo +rec5dpMRWMCOpLAMi recxxtP9pVtsCoGzo +rece7uNeWPW2xbhSO recxxtP9pVtsCoGzo +recZGBOu8Zz56WkIw recxxtP9pVtsCoGzo +recsp4bBpryR5mo3a recxxtP9pVtsCoGzo +rectZsMm3HDl3xzay recxxtP9pVtsCoGzo +reczUvQqDCSFTiPGi recxxtP9pVtsCoGzo +recbFS86I0RGUVZue recxxtP9pVtsCoGzo +rec49QGAIoBcKGnYR recxxtP9pVtsCoGzo +\. + + +-- +-- Data for Name: nc_hook_logs_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_hook_logs_v2 (id, base_id, project_id, fk_hook_id, type, event, operation, test_call, payload, conditions, notification, error_code, error_message, error, execution_time, response, triggered_by, created_at, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: nc_hooks; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_hooks (id, project_id, db_alias, title, description, env, tn, type, event, operation, async, payload, url, headers, condition, notification, retries, retry_interval, timeout, active, created_at, updated_at) FROM stdin; +1 \N db \N \N all \N AUTH_MIDDLEWARE \N \N f t \N \N \N \N 0 60000 60000 t \N \N +\. + + +-- +-- Name: nc_hooks_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_hooks_id_seq', 1, true); + + +-- +-- Data for Name: nc_hooks_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_hooks_v2 (id, base_id, project_id, fk_model_id, title, description, env, type, event, operation, async, payload, url, headers, condition, notification, retries, retry_interval, timeout, active, created_at, updated_at) FROM stdin; +hk_cbdg91nbcvl3yp ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_lh3bakzk8scz7r Webhook-1 \N all \N after insert f f \N \N f {"type":"URL","payload":{"method":"POST","body":"{{ json data }}","path":"http://localhost:9090/hook"}} 0 60000 60000 t 2022-06-13 07:19:02.703457+00 2022-06-13 07:19:02.703457+00 +hk_ehmnjeaqlau31j ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_lh3bakzk8scz7r Webhook-2 \N all \N after update f f \N \N f {"type":"URL","payload":{"method":"POST","body":"{{ json data }}","path":"http://localhost:9090/hook"}} 0 60000 60000 t 2022-06-13 07:19:14.716389+00 2022-06-13 07:19:14.716389+00 +hk_cr03i3db3y94t9 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_lh3bakzk8scz7r Webhook-3 \N all \N after delete f f \N \N f {"type":"URL","payload":{"method":"POST","body":"{{ json data }}","path":"http://localhost:9090/hook"}} 0 60000 60000 t 2022-06-13 07:19:25.520937+00 2022-06-13 07:19:25.520937+00 +\. + + +-- +-- Data for Name: nc_kanban_view_columns_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_kanban_view_columns_v2 (id, base_id, project_id, fk_view_id, fk_column_id, uuid, label, help, show, "order", created_at, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: nc_kanban_view_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_kanban_view_v2 (fk_view_id, base_id, project_id, show, "order", uuid, title, public, password, show_all_fields, created_at, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: nc_loaders; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_loaders (id, project_id, db_alias, title, parent, child, relation, resolver, functions, created_at, updated_at) FROM stdin; +\. + + +-- +-- Name: nc_loaders_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_loaders_id_seq', 1, false); + + +-- +-- Data for Name: nc_migrations; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_migrations (id, project_id, db_alias, up, down, title, title_down, description, batch, checksum, status, created_at, updated_at) FROM stdin; +\. + + +-- +-- Name: nc_migrations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_migrations_id_seq', 1, false); + + +-- +-- Data for Name: nc_models; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_models (id, project_id, db_alias, title, alias, type, meta, schema, schema_previous, services, messages, enabled, parent_model_title, show_as, query_params, list_idx, tags, pinned, created_at, updated_at, mm, m_to_m_meta, "order", view_order) FROM stdin; +\. + + +-- +-- Name: nc_models_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_models_id_seq', 1, false); + + +-- +-- Data for Name: nc_models_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_models_v2 (id, base_id, project_id, table_name, title, type, meta, schema, enabled, mm, tags, pinned, deleted, "order", created_at, updated_at) FROM stdin; +md_w4bsfg7gtmqque ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 nc_hblt___Film Film table \N \N t f \N \N \N 1 2022-06-13 07:00:46.465781+00 2022-06-13 07:00:46.465781+00 +md_lh3bakzk8scz7r ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 nc_hblt___Actor Actor table \N \N t f \N \N \N 2 2022-06-13 07:00:46.757762+00 2022-06-13 07:00:46.757762+00 +md_ud292ppq36mp14 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 nc_hblt___Producer Producer table \N \N t f \N \N \N 3 2022-06-13 07:00:46.878627+00 2022-06-13 07:00:46.878627+00 +md_affo9e0j69frre ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 nc_hblt___nc_m2m__9oevq0x2z nc_hblt___nc_m2m__9oevq0x2z table \N \N t t \N \N \N 1 2022-06-13 07:00:46.999127+00 2022-06-13 07:00:46.999127+00 +\. + + +-- +-- Data for Name: nc_orgs_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_orgs_v2 (id, title, created_at, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: nc_plugins; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_plugins (id, project_id, db_alias, title, description, active, rating, version, docs, status, status_details, logo, icon, tags, category, input_schema, input, creator, creator_website, price, created_at, updated_at) FROM stdin; +1 \N \N Google Google OAuth2 login. f \N 0.0.1 \N install \N plugins/google.png \N Authentication Google {"title":"Configure Google Auth","items":[{"key":"client_id","label":"Client ID","placeholder":"Client ID","type":"SingleLineText","required":true},{"key":"client_secret","label":"Client Secret","placeholder":"Client Secret","type":"Password","required":true},{"key":"redirect_url","label":"Redirect URL","placeholder":"Redirect URL","type":"SingleLineText","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and configured Google Authentication, restart NocoDB","msgOnUninstall":""} \N \N \N Free \N \N +3 \N \N Metadata LRU Cache A cache object that deletes the least-recently-used items. t \N 0.0.1 \N install \N plugins/xgene.png \N Cache Cache {"title":"Configure Metadata LRU Cache","items":[{"key":"max","label":"Maximum Size","placeholder":"Maximum Size","type":"SingleLineText","required":true},{"key":"maxAge","label":"Maximum Age(in ms)","placeholder":"Maximum Age(in ms)","type":"SingleLineText","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully updated LRU cache options.","msgOnUninstall":""} {"max":500,"maxAge":86400000} \N \N Free \N \N +\. + + +-- +-- Name: nc_plugins_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_plugins_id_seq', 3, true); + + +-- +-- Data for Name: nc_plugins_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_plugins_v2 (id, title, description, active, rating, version, docs, status, status_details, logo, icon, tags, category, input_schema, input, creator, creator_website, price, created_at, updated_at) FROM stdin; +nc_ue47dz5lnghqq4 Slack Slack brings team communication and collaboration into one place so you can get more work done, whether you belong to a large enterprise or a small business. f \N 0.0.1 \N install \N plugins/slack.webp \N Chat Chat {"title":"Configure Slack","array":true,"items":[{"key":"channel","label":"Channel Name","placeholder":"Channel Name","type":"SingleLineText","required":true},{"key":"webhook_url","label":"Webhook URL","placeholder":"Webhook URL","type":"Password","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and Slack is enabled for notification.","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.577959+00 2022-06-13 07:00:02.577959+00 +nc_2enis5bzipn39y Microsoft Teams Microsoft Teams is for everyone · Instantly go from group chat to video call with the touch of a button. f \N 0.0.1 \N install \N plugins/teams.ico \N Chat Chat {"title":"Configure Microsoft Teams","array":true,"items":[{"key":"channel","label":"Channel Name","placeholder":"Channel Name","type":"SingleLineText","required":true},{"key":"webhook_url","label":"Webhook URL","placeholder":"Webhook URL","type":"Password","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and Microsoft Teams is enabled for notification.","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.580437+00 2022-06-13 07:00:02.580437+00 +nc_wl4r0wn8ui6czq Discord Discord is the easiest way to talk over voice, video, and text. Talk, chat, hang out, and stay close with your friends and communities. f \N 0.0.1 \N install \N plugins/discord.png \N Chat Chat {"title":"Configure Discord","array":true,"items":[{"key":"channel","label":"Channel Name","placeholder":"Channel Name","type":"SingleLineText","required":true},{"key":"webhook_url","label":"Webhook URL","type":"Password","placeholder":"Webhook URL","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and Discord is enabled for notification.","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.582583+00 2022-06-13 07:00:02.582583+00 +nc_o0cyb86587fx2p Whatsapp Twilio With Twilio, unite communications and strengthen customer relationships across your business – from marketing and sales to customer service and operations. f \N 0.0.1 \N install \N plugins/whatsapp.png \N Chat Twilio {"title":"Configure Twilio","items":[{"key":"sid","label":"Account SID","placeholder":"Account SID","type":"SingleLineText","required":true},{"key":"token","label":"Auth Token","placeholder":"Auth Token","type":"Password","required":true},{"key":"from","label":"From Phone Number","placeholder":"From Phone Number","type":"SingleLineText","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and Whatsapp Twilio is enabled for notification.","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.584397+00 2022-06-13 07:00:02.584397+00 +nc_6zhcewe1rgii7s Twilio With Twilio, unite communications and strengthen customer relationships across your business – from marketing and sales to customer service and operations. f \N 0.0.1 \N install \N plugins/twilio.png \N Chat Twilio {"title":"Configure Twilio","items":[{"key":"sid","label":"Account SID","placeholder":"Account SID","type":"SingleLineText","required":true},{"key":"token","label":"Auth Token","placeholder":"Auth Token","type":"Password","required":true},{"key":"from","label":"From Phone Number","placeholder":"From Phone Number","type":"SingleLineText","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and Twilio is enabled for notification.","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.586326+00 2022-06-13 07:00:02.586326+00 +nc_z6zkc3aqd0t0x9 S3 Amazon Simple Storage Service (Amazon S3) is an object storage service that offers industry-leading scalability, data availability, security, and performance. f \N 0.0.1 \N install \N plugins/s3.png \N Storage Storage {"title":"Configure Amazon S3","items":[{"key":"bucket","label":"Bucket Name","placeholder":"Bucket Name","type":"SingleLineText","required":true},{"key":"region","label":"Region","placeholder":"Region","type":"SingleLineText","required":true},{"key":"access_key","label":"Access Key","placeholder":"Access Key","type":"SingleLineText","required":true},{"key":"access_secret","label":"Access Secret","placeholder":"Access Secret","type":"Password","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and attachment will be stored in AWS S3","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.58839+00 2022-06-13 07:00:02.58839+00 +nc_kx9hp5fmld1m1v Minio MinIO is a High Performance Object Storage released under Apache License v2.0. It is API compatible with Amazon S3 cloud storage service. f \N 0.0.1 \N install \N plugins/minio.png \N Storage Storage {"title":"Configure Minio","items":[{"key":"endPoint","label":"Minio Endpoint","placeholder":"Minio Endpoint","type":"SingleLineText","required":true},{"key":"port","label":"Port","placeholder":"Port","type":"Number","required":true},{"key":"bucket","label":"Bucket Name","placeholder":"Bucket Name","type":"SingleLineText","required":true},{"key":"access_key","label":"Access Key","placeholder":"Access Key","type":"SingleLineText","required":true},{"key":"access_secret","label":"Access Secret","placeholder":"Access Secret","type":"Password","required":true},{"key":"useSSL","label":"Use SSL","placeholder":"Use SSL","type":"Checkbox","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and attachment will be stored in Minio","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.590598+00 2022-06-13 07:00:02.590598+00 +nc_vatp4ktlx399ns GCS Google Cloud Storage is a RESTful online file storage web service for storing and accessing data on Google Cloud Platform infrastructure. f \N 0.0.2 \N install \N plugins/gcs.png \N Storage Storage {"title":"Configure Google Cloud Storage","items":[{"key":"bucket","label":"Bucket Name","placeholder":"Bucket Name","type":"SingleLineText","required":true},{"key":"client_email","label":"Client Email","placeholder":"Client Email","type":"SingleLineText","required":true},{"key":"private_key","label":"Private Key","placeholder":"Private Key","type":"Password","required":true},{"key":"project_id","label":"Project ID","placeholder":"Project ID","type":"SingleLineText","required":false}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and attachment will be stored in Google Cloud Storage","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.59276+00 2022-06-13 07:00:02.59276+00 +nc_3mzqbwr0746lef Mattermost Mattermost brings all your team communication into one place, making it searchable and accessible anywhere. f \N 0.0.1 \N install \N plugins/mattermost.png \N Chat Chat {"title":"Configure Mattermost","array":true,"items":[{"key":"channel","label":"Channel Name","placeholder":"Channel Name","type":"SingleLineText","required":true},{"key":"webhook_url","label":"Webhook URL","placeholder":"Webhook URL","type":"Password","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and Mattermost is enabled for notification.","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.59478+00 2022-06-13 07:00:02.59478+00 +nc_bdt98lalossz1t Spaces Store & deliver vast amounts of content with a simple architecture. f \N 0.0.1 \N install \N plugins/spaces.png \N Storage Storage {"title":"DigitalOcean Spaces","items":[{"key":"bucket","label":"Bucket Name","placeholder":"Bucket Name","type":"SingleLineText","required":true},{"key":"region","label":"Region","placeholder":"Region","type":"SingleLineText","required":true},{"key":"access_key","label":"Access Key","placeholder":"Access Key","type":"SingleLineText","required":true},{"key":"access_secret","label":"Access Secret","placeholder":"Access Secret","type":"Password","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and attachment will be stored in DigitalOcean Spaces","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.597091+00 2022-06-13 07:00:02.597091+00 +nc_f0iy05qtnwniu4 Backblaze B2 Backblaze B2 is enterprise-grade, S3 compatible storage that companies around the world use to store and serve data while improving their cloud OpEx vs. Amazon S3 and others. f \N 0.0.1 \N install \N plugins/backblaze.jpeg \N Storage Storage {"title":"Configure Backblaze B2","items":[{"key":"bucket","label":"Bucket Name","placeholder":"Bucket Name","type":"SingleLineText","required":true},{"key":"region","label":"Region","placeholder":"Region","type":"SingleLineText","required":true},{"key":"access_key","label":"Access Key","placeholder":"Access Key","type":"SingleLineText","required":true},{"key":"access_secret","label":"Access Secret","placeholder":"Access Secret","type":"Password","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and attachment will be stored in Backblaze B2","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.599397+00 2022-06-13 07:00:02.599397+00 +nc_iyhlectialukbv Vultr Object Storage Using Vultr Object Storage can give flexibility and cloud storage that allows applications greater flexibility and access worldwide. f \N 0.0.1 \N install \N plugins/vultr.png \N Storage Storage {"title":"Configure Vultr Object Storage","items":[{"key":"bucket","label":"Bucket Name","placeholder":"Bucket Name","type":"SingleLineText","required":true},{"key":"access_key","label":"Access Key","placeholder":"Access Key","type":"SingleLineText","required":true},{"key":"access_secret","label":"Access Secret","placeholder":"Access Secret","type":"Password","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and attachment will be stored in Vultr Object Storage","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.60139+00 2022-06-13 07:00:02.60139+00 +nc_lr8pcvg64g5bho OvhCloud Object Storage Upload your files to a space that you can access via HTTPS using the OpenStack Swift API, or the S3 API. f \N 0.0.1 \N install \N plugins/ovhCloud.png \N Storage Storage {"title":"Configure OvhCloud Object Storage","items":[{"key":"bucket","label":"Bucket Name","placeholder":"Bucket Name","type":"SingleLineText","required":true},{"key":"region","label":"Region","placeholder":"Region","type":"SingleLineText","required":true},{"key":"access_key","label":"Access Key","placeholder":"Access Key","type":"SingleLineText","required":true},{"key":"access_secret","label":"Access Secret","placeholder":"Access Secret","type":"Password","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and attachment will be stored in OvhCloud Object Storage","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.60416+00 2022-06-13 07:00:02.60416+00 +nc_3f19m6v5iyudty Linode Object Storage S3-compatible Linode Object Storage makes it easy and more affordable to manage unstructured data such as content assets, as well as sophisticated and data-intensive storage challenges around artificial intelligence and machine learning. f \N 0.0.1 \N install \N plugins/linode.svg \N Storage Storage {"title":"Configure Linode Object Storage","items":[{"key":"bucket","label":"Bucket Name","placeholder":"Bucket Name","type":"SingleLineText","required":true},{"key":"region","label":"Region","placeholder":"Region","type":"SingleLineText","required":true},{"key":"access_key","label":"Access Key","placeholder":"Access Key","type":"SingleLineText","required":true},{"key":"access_secret","label":"Access Secret","placeholder":"Access Secret","type":"Password","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and attachment will be stored in Linode Object Storage","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.606391+00 2022-06-13 07:00:02.606391+00 +nc_ikemr7ajwzfcr3 UpCloud Object Storage The perfect home for your data. Thanks to the S3-compatible programmable interface,\nyou have a host of options for existing tools and code implementations.\n f \N 0.0.1 \N install \N plugins/upcloud.png \N Storage Storage {"title":"Configure UpCloud Object Storage","items":[{"key":"bucket","label":"Bucket Name","placeholder":"Bucket Name","type":"SingleLineText","required":true},{"key":"endpoint","label":"Endpoint","placeholder":"Endpoint","type":"SingleLineText","required":true},{"key":"access_key","label":"Access Key","placeholder":"Access Key","type":"SingleLineText","required":true},{"key":"access_secret","label":"Access Secret","placeholder":"Access Secret","type":"Password","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and attachment will be stored in UpCloud Object Storage","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.6085+00 2022-06-13 07:00:02.6085+00 +nc_tv5fgn17fgvcwh SMTP SMTP email client f \N 0.0.1 \N install \N \N \N Email Email {"title":"Configure Email SMTP","items":[{"key":"from","label":"From","placeholder":"eg: admin@run.com","type":"SingleLineText","required":true},{"key":"host","label":"Host","placeholder":"eg: smtp.run.com","type":"SingleLineText","required":true},{"key":"port","label":"Port","placeholder":"Port","type":"SingleLineText","required":true},{"key":"secure","label":"Secure","placeholder":"Secure","type":"SingleLineText","required":true},{"key":"ignoreTLS","label":"Ignore TLS","placeholder":"Ignore TLS","type":"Checkbox","required":false},{"key":"username","label":"Username","placeholder":"Username","type":"SingleLineText","required":false},{"key":"password","label":"Password","placeholder":"Password","type":"Password","required":false}],"actions":[{"label":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and email notification will use SMTP configuration","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.61079+00 2022-06-13 07:00:02.61079+00 +nc_hcnsq71s0tr8um MailerSend MailerSend email client f \N 0.0.1 \N install \N plugins/mailersend.svg \N Email Email {"title":"Configure MailerSend","items":[{"key":"api_key","label":"API KEy","placeholder":"eg: ***************","type":"Password","required":true},{"key":"from","label":"From","placeholder":"eg: admin@run.com","type":"SingleLineText","required":true},{"key":"from_name","label":"From Name","placeholder":"eg: Adam","type":"SingleLineText","required":true}],"actions":[{"label":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and email notification will use MailerSend configuration","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.612874+00 2022-06-13 07:00:02.612874+00 +nc_z2zas0qdy0cz7e Scaleway Object Storage Scaleway Object Storage is an S3-compatible object store from Scaleway Cloud Platform. f \N 0.0.1 \N install \N plugins/scaleway.png \N Storage Storage {"title":"Setup Scaleway","items":[{"key":"bucket","label":"Bucket name","placeholder":"Bucket name","type":"SingleLineText","required":true},{"key":"region","label":"Region of bucket","placeholder":"Region of bucket","type":"SingleLineText","required":true},{"key":"access_key","label":"Access Key","placeholder":"Access Key","type":"SingleLineText","required":true},{"key":"access_secret","label":"Access Secret","placeholder":"Access Secret","type":"Password","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed Scaleway Object Storage","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.61482+00 2022-06-13 07:00:02.61482+00 +nc_96vkc0jdyw7los SES Amazon Simple Email Service (SES) is a cost-effective, flexible, and scalable email service that enables developers to send mail from within any application. f \N 0.0.1 \N install \N plugins/aws.png \N Email Email {"title":"Configure Amazon Simple Email Service (SES)","items":[{"key":"from","label":"From","placeholder":"From","type":"SingleLineText","required":true},{"key":"region","label":"Region","placeholder":"Region","type":"SingleLineText","required":true},{"key":"access_key","label":"Access Key","placeholder":"Access Key","type":"SingleLineText","required":true},{"key":"access_secret","label":"Access Secret","placeholder":"Access Secret","type":"Password","required":true}],"actions":[{"label":"Test","placeholder":"Test","key":"test","actionType":"TEST","type":"Button"},{"label":"Save","placeholder":"Save","key":"save","actionType":"SUBMIT","type":"Button"}],"msgOnInstall":"Successfully installed and email notification will use Amazon SES","msgOnUninstall":""} \N \N \N \N 2022-06-13 07:00:02.617114+00 2022-06-13 07:00:02.617114+00 +\. + + +-- +-- Data for Name: nc_project_users_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_project_users_v2 (project_id, fk_user_id, roles, starred, pinned, "group", color, "order", hidden, opened_date, created_at, updated_at) FROM stdin; +p_99s02mvqpc2j14 us_rpuib1longhhqj owner \N \N \N \N \N \N \N 2022-06-13 07:00:19.43059+00 2022-06-13 07:00:19.43059+00 +p_99s02mvqpc2j14 us_yqik4gzwara2jg owner \N \N \N \N \N \N \N 2022-06-13 07:00:47.180148+00 2022-06-13 07:00:47.180148+00 +p_99s02mvqpc2j14 us_vwibm9djmu2f8l creator \N \N \N \N \N \N \N 2022-06-13 07:00:47.181008+00 2022-06-13 07:00:47.181008+00 +\. + + +-- +-- Data for Name: nc_projects; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_projects (id, title, status, description, config, meta, created_at, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: nc_projects_users; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_projects_users (project_id, user_id, roles, created_at, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: nc_projects_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_projects_v2 (id, title, prefix, status, description, meta, color, uuid, password, roles, deleted, is_meta, "order", created_at, updated_at) FROM stdin; +p_99s02mvqpc2j14 sample nc_hblt__ \N \N \N \N \N \N \N f t \N 2022-06-13 07:00:19.405417+00 2022-06-13 07:00:19.405417+00 +\. + + +-- +-- Data for Name: nc_relations; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_relations (id, project_id, db_alias, tn, rtn, _tn, _rtn, cn, rcn, _cn, _rcn, referenced_db_alias, type, db_type, ur, dr, created_at, updated_at, fkn) FROM stdin; +\. + + +-- +-- Name: nc_relations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_relations_id_seq', 1, false); + + +-- +-- Data for Name: nc_resolvers; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_resolvers (id, project_id, db_alias, title, resolver, type, acl, functions, handler_type, created_at, updated_at) FROM stdin; +\. + + +-- +-- Name: nc_resolvers_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_resolvers_id_seq', 1, false); + + +-- +-- Data for Name: nc_roles; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_roles (id, project_id, db_alias, title, type, description, created_at, updated_at) FROM stdin; +1 owner SYSTEM Can add/remove creators. And full edit database structures & fields. \N \N +2 creator SYSTEM Can fully edit database structure & values \N \N +3 editor SYSTEM Can edit records but cannot change structure of database/fields \N \N +4 commenter SYSTEM Can view and comment the records but cannot edit anything \N \N +5 viewer SYSTEM Can view the records but cannot edit anything \N \N +\. + + +-- +-- Name: nc_roles_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_roles_id_seq', 5, true); + + +-- +-- Data for Name: nc_routes; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_routes (id, project_id, db_alias, title, tn, tnp, tnc, relation_type, path, type, handler, acl, "order", functions, handler_type, is_custom, created_at, updated_at) FROM stdin; +\. + + +-- +-- Name: nc_routes_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_routes_id_seq', 1, false); + + +-- +-- Data for Name: nc_rpc; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_rpc (id, project_id, db_alias, title, tn, service, tnp, tnc, relation_type, "order", type, acl, functions, handler_type, created_at, updated_at) FROM stdin; +\. + + +-- +-- Name: nc_rpc_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_rpc_id_seq', 1, false); + + +-- +-- Data for Name: nc_shared_bases; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_shared_bases (id, project_id, db_alias, roles, shared_base_id, enabled, password, created_at, updated_at) FROM stdin; +\. + + +-- +-- Name: nc_shared_bases_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_shared_bases_id_seq', 1, false); + + +-- +-- Data for Name: nc_shared_views; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_shared_views (id, project_id, db_alias, model_name, meta, query_params, view_id, show_all_fields, allow_copy, password, created_at, updated_at, view_type, view_name) FROM stdin; +\. + + +-- +-- Name: nc_shared_views_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_shared_views_id_seq', 1, false); + + +-- +-- Data for Name: nc_shared_views_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_shared_views_v2 (id, fk_view_id, meta, query_params, view_id, show_all_fields, allow_copy, password, deleted, "order", created_at, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: nc_sort_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_sort_v2 (id, base_id, project_id, fk_view_id, fk_column_id, direction, "order", created_at, updated_at) FROM stdin; +so_z0dmgqwd9vqdxm ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 vw_yv75dsa7wwvj3u cl_6h7ixf3wm93jl1 asc 1 2022-06-13 07:00:50.981854+00 2022-06-13 07:00:50.981854+00 +\. + + +-- +-- Data for Name: nc_store; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_store (id, project_id, db_alias, key, value, type, env, tag, created_at, updated_at) FROM stdin; +1 \N NC_DEBUG {"nc:app":false,"nc:api:rest":false,"nc:api:base":false,"nc:api:gql":false,"nc:api:grpc":false,"nc:migrator":false,"nc:datamapper":false} \N \N \N \N \N +2 \N NC_PROJECT_COUNT 0 \N \N \N \N \N +3 nc_auth_jwt_secret ffde7080-2a87-46db-a37a-c63362ee65c9 \N \N \N 2022-06-13 07:00:02.423767+00 2022-06-13 07:00:02.423767+00 +4 nc_server_id 6f06d97c2c27dd051c8dbb7dac19e082d64b4c0ebe8cb0487c473ad81f5f573e \N \N \N 2022-06-13 07:00:02.482361+00 2022-06-13 07:00:02.482361+00 +5 NC_CONFIG_MAIN {"version":"0090000"} \N \N \N 2022-06-13 07:00:02.484129+00 2022-06-13 07:00:02.484129+00 +\. + + +-- +-- Name: nc_store_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.nc_store_id_seq', 5, true); + + +-- +-- Data for Name: nc_sync_logs_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_sync_logs_v2 (id, project_id, fk_sync_source_id, time_taken, status, status_details, created_at, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: nc_sync_source_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_sync_source_v2 (id, title, type, details, deleted, enabled, "order", project_id, fk_user_id, created_at, updated_at) FROM stdin; +nc_gp23ourzjej6mj \N Airtable {"syncInterval":"15mins","syncDirection":"Airtable to NocoDB","syncRetryCount":1,"apiKey":"keyeZla3k0desT8fU","shareId":"shrkqTr5EkTe6kHAm","options":{"syncViews":true,"syncData":true,"syncRollup":false,"syncLookup":true,"syncFormula":false,"syncAttachment":true}} \N t \N p_99s02mvqpc2j14 us_rpuib1longhhqj 2022-06-13 07:00:42.881757+00 2022-06-13 07:00:42.881757+00 +\. + + +-- +-- Data for Name: nc_team_users_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_team_users_v2 (org_id, user_id, created_at, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: nc_teams_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_teams_v2 (id, title, org_id, created_at, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: nc_users_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_users_v2 (id, email, password, salt, firstname, lastname, username, refresh_token, invite_token, invite_token_expires, reset_password_expires, reset_password_token, email_verification_token, email_verified, roles, created_at, updated_at) FROM stdin; +us_yqik4gzwara2jg sivadstala@gmail.com \N \N \N \N \N \N 6fadaef0-20c2-4f47-8570-c36aa641e789 2022-06-14T12:30:47.176+05:30 \N \N \N \N user 2022-06-13 07:00:47.177377+00 2022-06-13 07:00:47.177377+00 +us_vwibm9djmu2f8l raju.us@gmail.com \N \N \N \N \N \N 00a1d74e-1663-44d5-819b-edce7fb6960f 2022-06-14T12:30:47.176+05:30 \N \N \N \N user 2022-06-13 07:00:47.177478+00 2022-06-13 07:00:47.177478+00 +us_rpuib1longhhqj user@nocodb.com $2a$10$kI0kbvmKcrCWW5zlYcXiQ.ALvCHp4LLmiSnVJX.ao3B31e/.NcT8y $2a$10$kI0kbvmKcrCWW5zlYcXiQ. \N \N \N 1f1eb855e6434cb9b79e3250fa27d90c53e4091a207405c83754a22415542ad60ee4d2cfd2a7a7e9 \N \N \N \N 846e5159-c2a1-45d0-9856-f593f8608b5f \N user,super 2022-06-13 07:00:15.899208+00 2022-06-13 07:19:45.959386+00 +\. + + +-- +-- Data for Name: nc_views_v2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.nc_views_v2 (id, base_id, project_id, fk_model_id, title, type, is_default, show_system_fields, lock_type, uuid, password, show, "order", created_at, updated_at) FROM stdin; +vw_9msmfh7uv5mfwz ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque Grid view 3 t \N collaborative \N \N t 1 2022-06-13 07:00:46.476133+00 2022-06-13 07:00:46.699194+00 +vw_mwyhnlv1f3g99f ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_lh3bakzk8scz7r Grid view 3 t \N collaborative \N \N t 1 2022-06-13 07:00:46.763434+00 2022-06-13 07:00:46.849242+00 +vw_3lc5xx7fjg3zfp ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Grid view 3 t \N collaborative \N \N t 1 2022-06-13 07:00:46.886599+00 2022-06-13 07:00:46.969902+00 +vw_0lwyv8ap72h0by ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_affo9e0j69frre nc_hblt___nc_m2m__9oevq0x2z 3 t \N collaborative \N \N t 1 2022-06-13 07:00:47.002934+00 2022-06-13 07:00:47.002934+00 +vw_yv75dsa7wwvj3u ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_lh3bakzk8scz7r Filter&Sort 3 \N \N collaborative \N \N t 2 2022-06-13 07:00:50.835063+00 2022-06-13 07:00:50.835063+00 +vw_4awlw6zujst2vm ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Grid 2 3 \N \N collaborative \N \N t 2 2022-06-13 07:00:53.164488+00 2022-06-13 07:00:53.164488+00 +vw_xov4el1bqpsgy8 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Grid 3 3 \N \N collaborative \N \N t 3 2022-06-13 07:00:54.104331+00 2022-06-13 07:00:54.104331+00 +vw_vdsb71p2zbuors ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Grid 4 3 \N \N collaborative \N \N t 4 2022-06-13 07:00:55.182985+00 2022-06-13 07:00:55.182985+00 +vw_ubm72q5tlmccvu ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_w4bsfg7gtmqque FormTitle 1 \N \N collaborative \N \N t 2 2022-06-13 07:00:56.395165+00 2022-06-13 07:00:56.395165+00 +vw_wbbiahyr1io2nq ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Form 1 \N \N collaborative \N \N t 5 2022-06-13 07:00:58.013574+00 2022-06-13 07:00:58.013574+00 +vw_8sgx53tn88hkfh ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Form 2 1 \N \N collaborative \N \N t 6 2022-06-13 07:00:59.108789+00 2022-06-13 07:00:59.108789+00 +vw_a71vtm0kxaoh6r ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Form 3 1 \N \N collaborative \N \N t 7 2022-06-13 07:01:00.066022+00 2022-06-13 07:01:00.066022+00 +vw_8fky8viw54t7tk ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Form 4 1 \N \N collaborative \N \N t 8 2022-06-13 07:01:01.310305+00 2022-06-13 07:01:01.310305+00 +vw_ordkcxhwg8pg88 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Gallery 2 \N \N collaborative \N \N t 9 2022-06-13 07:01:02.598404+00 2022-06-13 07:01:02.598404+00 +vw_p28ldcq3zy32b9 ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Gallery 2 2 \N \N collaborative \N \N t 10 2022-06-13 07:01:03.519443+00 2022-06-13 07:01:03.519443+00 +vw_clfkzvyypltmto ds_b5zy5nbvnbxowl p_99s02mvqpc2j14 md_ud292ppq36mp14 Gallery 3 2 \N \N collaborative \N \N t 11 2022-06-13 07:01:04.528674+00 2022-06-13 07:01:04.528674+00 +\. + + +-- +-- Data for Name: xc_knex_migrations; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.xc_knex_migrations (id, name, batch, migration_time) FROM stdin; +1 project 1 2022-06-13 07:00:02.162+00 +2 m2m 1 2022-06-13 07:00:02.165+00 +3 fkn 1 2022-06-13 07:00:02.167+00 +4 viewType 1 2022-06-13 07:00:02.169+00 +5 viewName 1 2022-06-13 07:00:02.17+00 +6 nc_006_alter_nc_shared_views 1 2022-06-13 07:00:02.173+00 +7 nc_007_alter_nc_shared_views_1 1 2022-06-13 07:00:02.175+00 +8 nc_008_add_nc_shared_bases 1 2022-06-13 07:00:02.18+00 +9 nc_009_add_model_order 1 2022-06-13 07:00:02.185+00 +10 nc_010_add_parent_title_column 1 2022-06-13 07:00:02.187+00 +11 nc_011_remove_old_ses_plugin 1 2022-06-13 07:00:02.189+00 +\. + + +-- +-- Name: xc_knex_migrations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.xc_knex_migrations_id_seq', 11, true); + + +-- +-- Data for Name: xc_knex_migrations_lock; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.xc_knex_migrations_lock (index, is_locked) FROM stdin; +1 0 +\. + + +-- +-- Name: xc_knex_migrations_lock_index_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.xc_knex_migrations_lock_index_seq', 1, true); + + +-- +-- Data for Name: xc_knex_migrationsv2; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.xc_knex_migrationsv2 (id, name, batch, migration_time) FROM stdin; +1 nc_011 1 2022-06-13 07:00:02.374+00 +2 nc_012_alter_column_data_types 1 2022-06-13 07:00:02.384+00 +3 nc_013_sync_source 1 2022-06-13 07:00:02.395+00 +4 nc_014_alter_column_data_types 1 2022-06-13 07:00:02.406+00 +5 nc_015_add_meta_col_in_column_table 1 2022-06-13 07:00:02.409+00 +6 nc_016_alter_hooklog_payload_types 1 2022-06-13 07:00:02.416+00 +\. + + +-- +-- Name: xc_knex_migrationsv2_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.xc_knex_migrationsv2_id_seq', 6, true); + + +-- +-- Data for Name: xc_knex_migrationsv2_lock; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.xc_knex_migrationsv2_lock (index, is_locked) FROM stdin; +1 0 +\. + + +-- +-- Name: xc_knex_migrationsv2_lock_index_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.xc_knex_migrationsv2_lock_index_seq', 1, true); + + +-- +-- Name: nc_acl nc_acl_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_acl + ADD CONSTRAINT nc_acl_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_api_tokens nc_api_tokens_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_api_tokens + ADD CONSTRAINT nc_api_tokens_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_audit nc_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_audit + ADD CONSTRAINT nc_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_audit_v2 nc_audit_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_audit_v2 + ADD CONSTRAINT nc_audit_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_bases_v2 nc_bases_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_bases_v2 + ADD CONSTRAINT nc_bases_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_col_formula_v2 nc_col_formula_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_formula_v2 + ADD CONSTRAINT nc_col_formula_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_col_lookup_v2 nc_col_lookup_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_lookup_v2 + ADD CONSTRAINT nc_col_lookup_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_col_relations_v2 nc_col_relations_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_relations_v2 + ADD CONSTRAINT nc_col_relations_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_col_rollup_v2 nc_col_rollup_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_rollup_v2 + ADD CONSTRAINT nc_col_rollup_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_col_select_options_v2 nc_col_select_options_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_select_options_v2 + ADD CONSTRAINT nc_col_select_options_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_columns_v2 nc_columns_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_columns_v2 + ADD CONSTRAINT nc_columns_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_cron nc_cron_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_cron + ADD CONSTRAINT nc_cron_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_disabled_models_for_role nc_disabled_models_for_role_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_disabled_models_for_role + ADD CONSTRAINT nc_disabled_models_for_role_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_disabled_models_for_role_v2 nc_disabled_models_for_role_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_disabled_models_for_role_v2 + ADD CONSTRAINT nc_disabled_models_for_role_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_evolutions nc_evolutions_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_evolutions + ADD CONSTRAINT nc_evolutions_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_filter_exp_v2 nc_filter_exp_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_filter_exp_v2 + ADD CONSTRAINT nc_filter_exp_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_form_view_columns_v2 nc_form_view_columns_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_form_view_columns_v2 + ADD CONSTRAINT nc_form_view_columns_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_form_view_v2 nc_form_view_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_form_view_v2 + ADD CONSTRAINT nc_form_view_v2_pkey PRIMARY KEY (fk_view_id); + + +-- +-- Name: nc_gallery_view_columns_v2 nc_gallery_view_columns_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_gallery_view_columns_v2 + ADD CONSTRAINT nc_gallery_view_columns_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_gallery_view_v2 nc_gallery_view_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_gallery_view_v2 + ADD CONSTRAINT nc_gallery_view_v2_pkey PRIMARY KEY (fk_view_id); + + +-- +-- Name: nc_grid_view_columns_v2 nc_grid_view_columns_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_grid_view_columns_v2 + ADD CONSTRAINT nc_grid_view_columns_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_grid_view_v2 nc_grid_view_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_grid_view_v2 + ADD CONSTRAINT nc_grid_view_v2_pkey PRIMARY KEY (fk_view_id); + + +-- +-- Name: nc_hblt___Actor nc_hblt___Actor_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public."nc_hblt___Actor" + ADD CONSTRAINT "nc_hblt___Actor_pkey" PRIMARY KEY ("ncRecordId"); + + +-- +-- Name: nc_hblt___Film nc_hblt___Film_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public."nc_hblt___Film" + ADD CONSTRAINT "nc_hblt___Film_pkey" PRIMARY KEY ("ncRecordId"); + + +-- +-- Name: nc_hblt___Producer nc_hblt___Producer_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public."nc_hblt___Producer" + ADD CONSTRAINT "nc_hblt___Producer_pkey" PRIMARY KEY ("ncRecordId"); + + +-- +-- Name: nc_hblt___nc_m2m__9oevq0x2z nc_hblt___nc_m2m__9oevq0x2z_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_hblt___nc_m2m__9oevq0x2z + ADD CONSTRAINT nc_hblt___nc_m2m__9oevq0x2z_pkey PRIMARY KEY (table2_id, table1_id); + + +-- +-- Name: nc_hook_logs_v2 nc_hook_logs_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_hook_logs_v2 + ADD CONSTRAINT nc_hook_logs_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_hooks nc_hooks_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_hooks + ADD CONSTRAINT nc_hooks_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_hooks_v2 nc_hooks_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_hooks_v2 + ADD CONSTRAINT nc_hooks_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_kanban_view_columns_v2 nc_kanban_view_columns_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_kanban_view_columns_v2 + ADD CONSTRAINT nc_kanban_view_columns_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_kanban_view_v2 nc_kanban_view_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_kanban_view_v2 + ADD CONSTRAINT nc_kanban_view_v2_pkey PRIMARY KEY (fk_view_id); + + +-- +-- Name: nc_loaders nc_loaders_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_loaders + ADD CONSTRAINT nc_loaders_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_migrations nc_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_migrations + ADD CONSTRAINT nc_migrations_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_models nc_models_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_models + ADD CONSTRAINT nc_models_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_models_v2 nc_models_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_models_v2 + ADD CONSTRAINT nc_models_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_orgs_v2 nc_orgs_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_orgs_v2 + ADD CONSTRAINT nc_orgs_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_plugins nc_plugins_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_plugins + ADD CONSTRAINT nc_plugins_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_plugins_v2 nc_plugins_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_plugins_v2 + ADD CONSTRAINT nc_plugins_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_projects nc_projects_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_projects + ADD CONSTRAINT nc_projects_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_projects_v2 nc_projects_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_projects_v2 + ADD CONSTRAINT nc_projects_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_relations nc_relations_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_relations + ADD CONSTRAINT nc_relations_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_resolvers nc_resolvers_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_resolvers + ADD CONSTRAINT nc_resolvers_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_roles nc_roles_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_roles + ADD CONSTRAINT nc_roles_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_routes nc_routes_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_routes + ADD CONSTRAINT nc_routes_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_rpc nc_rpc_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_rpc + ADD CONSTRAINT nc_rpc_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_shared_bases nc_shared_bases_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_shared_bases + ADD CONSTRAINT nc_shared_bases_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_shared_views nc_shared_views_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_shared_views + ADD CONSTRAINT nc_shared_views_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_shared_views_v2 nc_shared_views_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_shared_views_v2 + ADD CONSTRAINT nc_shared_views_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_sort_v2 nc_sort_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_sort_v2 + ADD CONSTRAINT nc_sort_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_store nc_store_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_store + ADD CONSTRAINT nc_store_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_sync_logs_v2 nc_sync_logs_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_sync_logs_v2 + ADD CONSTRAINT nc_sync_logs_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_sync_source_v2 nc_sync_source_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_sync_source_v2 + ADD CONSTRAINT nc_sync_source_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_teams_v2 nc_teams_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_teams_v2 + ADD CONSTRAINT nc_teams_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_users_v2 nc_users_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_users_v2 + ADD CONSTRAINT nc_users_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: nc_views_v2 nc_views_v2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_views_v2 + ADD CONSTRAINT nc_views_v2_pkey PRIMARY KEY (id); + + +-- +-- Name: xc_knex_migrations_lock xc_knex_migrations_lock_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.xc_knex_migrations_lock + ADD CONSTRAINT xc_knex_migrations_lock_pkey PRIMARY KEY (index); + + +-- +-- Name: xc_knex_migrations xc_knex_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.xc_knex_migrations + ADD CONSTRAINT xc_knex_migrations_pkey PRIMARY KEY (id); + + +-- +-- Name: xc_knex_migrationsv2_lock xc_knex_migrationsv2_lock_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.xc_knex_migrationsv2_lock + ADD CONSTRAINT xc_knex_migrationsv2_lock_pkey PRIMARY KEY (index); + + +-- +-- Name: xc_knex_migrationsv2 xc_knex_migrationsv2_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.xc_knex_migrationsv2 + ADD CONSTRAINT xc_knex_migrationsv2_pkey PRIMARY KEY (id); + + +-- +-- Name: `nc_audit_index`; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "`nc_audit_index`" ON public.nc_audit USING btree (db_alias, project_id, model_name, model_id); + + +-- +-- Name: nc_audit_v2_row_id_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX nc_audit_v2_row_id_index ON public.nc_audit_v2 USING btree (row_id); + + +-- +-- Name: nc_hblt___nc_m2m__9oevq0x2z_table1_id_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX nc_hblt___nc_m2m__9oevq0x2z_table1_id_index ON public.nc_hblt___nc_m2m__9oevq0x2z USING btree (table1_id); + + +-- +-- Name: nc_hblt___nc_m2m__9oevq0x2z_table2_id_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX nc_hblt___nc_m2m__9oevq0x2z_table2_id_index ON public.nc_hblt___nc_m2m__9oevq0x2z USING btree (table2_id); + + +-- +-- Name: nc_hblt___producer_nc_hblt___film_id_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX nc_hblt___producer_nc_hblt___film_id_index ON public."nc_hblt___Producer" USING btree ("nc_hblt___Film_id"); + + +-- +-- Name: nc_models_db_alias_title_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX nc_models_db_alias_title_index ON public.nc_models USING btree (db_alias, title); + + +-- +-- Name: nc_models_order_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX nc_models_order_index ON public.nc_models USING btree ("order"); + + +-- +-- Name: nc_models_view_order_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX nc_models_view_order_index ON public.nc_models USING btree (view_order); + + +-- +-- Name: nc_projects_users_project_id_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX nc_projects_users_project_id_index ON public.nc_projects_users USING btree (project_id); + + +-- +-- Name: nc_projects_users_user_id_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX nc_projects_users_user_id_index ON public.nc_projects_users USING btree (user_id); + + +-- +-- Name: nc_relations_db_alias_tn_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX nc_relations_db_alias_tn_index ON public.nc_relations USING btree (db_alias, tn); + + +-- +-- Name: nc_routes_db_alias_title_tn_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX nc_routes_db_alias_title_tn_index ON public.nc_routes USING btree (db_alias, title, tn); + + +-- +-- Name: nc_store_key_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX nc_store_key_index ON public.nc_store USING btree (key); + + +-- +-- Name: xc_disabled124_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX xc_disabled124_idx ON public.nc_disabled_models_for_role USING btree (project_id, db_alias, title, type, role); + + +-- +-- Name: nc_audit_v2 nc_audit_v2_base_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_audit_v2 + ADD CONSTRAINT nc_audit_v2_base_id_foreign FOREIGN KEY (base_id) REFERENCES public.nc_bases_v2(id); + + +-- +-- Name: nc_audit_v2 nc_audit_v2_fk_model_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_audit_v2 + ADD CONSTRAINT nc_audit_v2_fk_model_id_foreign FOREIGN KEY (fk_model_id) REFERENCES public.nc_models_v2(id); + + +-- +-- Name: nc_audit_v2 nc_audit_v2_project_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_audit_v2 + ADD CONSTRAINT nc_audit_v2_project_id_foreign FOREIGN KEY (project_id) REFERENCES public.nc_projects_v2(id); + + +-- +-- Name: nc_bases_v2 nc_bases_v2_project_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_bases_v2 + ADD CONSTRAINT nc_bases_v2_project_id_foreign FOREIGN KEY (project_id) REFERENCES public.nc_projects_v2(id); + + +-- +-- Name: nc_col_formula_v2 nc_col_formula_v2_fk_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_formula_v2 + ADD CONSTRAINT nc_col_formula_v2_fk_column_id_foreign FOREIGN KEY (fk_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_col_lookup_v2 nc_col_lookup_v2_fk_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_lookup_v2 + ADD CONSTRAINT nc_col_lookup_v2_fk_column_id_foreign FOREIGN KEY (fk_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_col_lookup_v2 nc_col_lookup_v2_fk_lookup_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_lookup_v2 + ADD CONSTRAINT nc_col_lookup_v2_fk_lookup_column_id_foreign FOREIGN KEY (fk_lookup_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_col_lookup_v2 nc_col_lookup_v2_fk_relation_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_lookup_v2 + ADD CONSTRAINT nc_col_lookup_v2_fk_relation_column_id_foreign FOREIGN KEY (fk_relation_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_col_relations_v2 nc_col_relations_v2_fk_child_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_relations_v2 + ADD CONSTRAINT nc_col_relations_v2_fk_child_column_id_foreign FOREIGN KEY (fk_child_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_col_relations_v2 nc_col_relations_v2_fk_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_relations_v2 + ADD CONSTRAINT nc_col_relations_v2_fk_column_id_foreign FOREIGN KEY (fk_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_col_relations_v2 nc_col_relations_v2_fk_mm_child_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_relations_v2 + ADD CONSTRAINT nc_col_relations_v2_fk_mm_child_column_id_foreign FOREIGN KEY (fk_mm_child_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_col_relations_v2 nc_col_relations_v2_fk_mm_model_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_relations_v2 + ADD CONSTRAINT nc_col_relations_v2_fk_mm_model_id_foreign FOREIGN KEY (fk_mm_model_id) REFERENCES public.nc_models_v2(id); + + +-- +-- Name: nc_col_relations_v2 nc_col_relations_v2_fk_mm_parent_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_relations_v2 + ADD CONSTRAINT nc_col_relations_v2_fk_mm_parent_column_id_foreign FOREIGN KEY (fk_mm_parent_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_col_relations_v2 nc_col_relations_v2_fk_parent_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_relations_v2 + ADD CONSTRAINT nc_col_relations_v2_fk_parent_column_id_foreign FOREIGN KEY (fk_parent_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_col_relations_v2 nc_col_relations_v2_fk_related_model_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_relations_v2 + ADD CONSTRAINT nc_col_relations_v2_fk_related_model_id_foreign FOREIGN KEY (fk_related_model_id) REFERENCES public.nc_models_v2(id); + + +-- +-- Name: nc_col_rollup_v2 nc_col_rollup_v2_fk_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_rollup_v2 + ADD CONSTRAINT nc_col_rollup_v2_fk_column_id_foreign FOREIGN KEY (fk_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_col_rollup_v2 nc_col_rollup_v2_fk_relation_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_rollup_v2 + ADD CONSTRAINT nc_col_rollup_v2_fk_relation_column_id_foreign FOREIGN KEY (fk_relation_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_col_rollup_v2 nc_col_rollup_v2_fk_rollup_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_rollup_v2 + ADD CONSTRAINT nc_col_rollup_v2_fk_rollup_column_id_foreign FOREIGN KEY (fk_rollup_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_col_select_options_v2 nc_col_select_options_v2_fk_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_col_select_options_v2 + ADD CONSTRAINT nc_col_select_options_v2_fk_column_id_foreign FOREIGN KEY (fk_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_columns_v2 nc_columns_v2_fk_model_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_columns_v2 + ADD CONSTRAINT nc_columns_v2_fk_model_id_foreign FOREIGN KEY (fk_model_id) REFERENCES public.nc_models_v2(id); + + +-- +-- Name: nc_disabled_models_for_role_v2 nc_disabled_models_for_role_v2_fk_view_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_disabled_models_for_role_v2 + ADD CONSTRAINT nc_disabled_models_for_role_v2_fk_view_id_foreign FOREIGN KEY (fk_view_id) REFERENCES public.nc_views_v2(id); + + +-- +-- Name: nc_filter_exp_v2 nc_filter_exp_v2_fk_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_filter_exp_v2 + ADD CONSTRAINT nc_filter_exp_v2_fk_column_id_foreign FOREIGN KEY (fk_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_filter_exp_v2 nc_filter_exp_v2_fk_hook_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_filter_exp_v2 + ADD CONSTRAINT nc_filter_exp_v2_fk_hook_id_foreign FOREIGN KEY (fk_hook_id) REFERENCES public.nc_hooks_v2(id); + + +-- +-- Name: nc_filter_exp_v2 nc_filter_exp_v2_fk_parent_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_filter_exp_v2 + ADD CONSTRAINT nc_filter_exp_v2_fk_parent_id_foreign FOREIGN KEY (fk_parent_id) REFERENCES public.nc_filter_exp_v2(id); + + +-- +-- Name: nc_filter_exp_v2 nc_filter_exp_v2_fk_view_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_filter_exp_v2 + ADD CONSTRAINT nc_filter_exp_v2_fk_view_id_foreign FOREIGN KEY (fk_view_id) REFERENCES public.nc_views_v2(id); + + +-- +-- Name: nc_form_view_columns_v2 nc_form_view_columns_v2_fk_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_form_view_columns_v2 + ADD CONSTRAINT nc_form_view_columns_v2_fk_column_id_foreign FOREIGN KEY (fk_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_form_view_columns_v2 nc_form_view_columns_v2_fk_view_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_form_view_columns_v2 + ADD CONSTRAINT nc_form_view_columns_v2_fk_view_id_foreign FOREIGN KEY (fk_view_id) REFERENCES public.nc_form_view_v2(fk_view_id); + + +-- +-- Name: nc_form_view_v2 nc_form_view_v2_fk_view_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_form_view_v2 + ADD CONSTRAINT nc_form_view_v2_fk_view_id_foreign FOREIGN KEY (fk_view_id) REFERENCES public.nc_views_v2(id); + + +-- +-- Name: nc_gallery_view_columns_v2 nc_gallery_view_columns_v2_fk_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_gallery_view_columns_v2 + ADD CONSTRAINT nc_gallery_view_columns_v2_fk_column_id_foreign FOREIGN KEY (fk_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_gallery_view_columns_v2 nc_gallery_view_columns_v2_fk_view_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_gallery_view_columns_v2 + ADD CONSTRAINT nc_gallery_view_columns_v2_fk_view_id_foreign FOREIGN KEY (fk_view_id) REFERENCES public.nc_gallery_view_v2(fk_view_id); + + +-- +-- Name: nc_gallery_view_v2 nc_gallery_view_v2_fk_cover_image_col_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_gallery_view_v2 + ADD CONSTRAINT nc_gallery_view_v2_fk_cover_image_col_id_foreign FOREIGN KEY (fk_cover_image_col_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_gallery_view_v2 nc_gallery_view_v2_fk_view_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_gallery_view_v2 + ADD CONSTRAINT nc_gallery_view_v2_fk_view_id_foreign FOREIGN KEY (fk_view_id) REFERENCES public.nc_views_v2(id); + + +-- +-- Name: nc_grid_view_columns_v2 nc_grid_view_columns_v2_fk_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_grid_view_columns_v2 + ADD CONSTRAINT nc_grid_view_columns_v2_fk_column_id_foreign FOREIGN KEY (fk_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_grid_view_columns_v2 nc_grid_view_columns_v2_fk_view_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_grid_view_columns_v2 + ADD CONSTRAINT nc_grid_view_columns_v2_fk_view_id_foreign FOREIGN KEY (fk_view_id) REFERENCES public.nc_grid_view_v2(fk_view_id); + + +-- +-- Name: nc_grid_view_v2 nc_grid_view_v2_fk_view_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_grid_view_v2 + ADD CONSTRAINT nc_grid_view_v2_fk_view_id_foreign FOREIGN KEY (fk_view_id) REFERENCES public.nc_views_v2(id); + + +-- +-- Name: nc_hblt___nc_m2m__9oevq0x2z nc_hblt___nc_m2m__9oevq0x2z_table1_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_hblt___nc_m2m__9oevq0x2z + ADD CONSTRAINT nc_hblt___nc_m2m__9oevq0x2z_table1_id_foreign FOREIGN KEY (table1_id) REFERENCES public."nc_hblt___Film"("ncRecordId"); + + +-- +-- Name: nc_hblt___nc_m2m__9oevq0x2z nc_hblt___nc_m2m__9oevq0x2z_table2_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_hblt___nc_m2m__9oevq0x2z + ADD CONSTRAINT nc_hblt___nc_m2m__9oevq0x2z_table2_id_foreign FOREIGN KEY (table2_id) REFERENCES public."nc_hblt___Actor"("ncRecordId"); + + +-- +-- Name: nc_hblt___Producer nc_hblt___producer_nc_hblt___film_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public."nc_hblt___Producer" + ADD CONSTRAINT nc_hblt___producer_nc_hblt___film_id_foreign FOREIGN KEY ("nc_hblt___Film_id") REFERENCES public."nc_hblt___Film"("ncRecordId"); + + +-- +-- Name: nc_hooks_v2 nc_hooks_v2_fk_model_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_hooks_v2 + ADD CONSTRAINT nc_hooks_v2_fk_model_id_foreign FOREIGN KEY (fk_model_id) REFERENCES public.nc_models_v2(id); + + +-- +-- Name: nc_kanban_view_columns_v2 nc_kanban_view_columns_v2_fk_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_kanban_view_columns_v2 + ADD CONSTRAINT nc_kanban_view_columns_v2_fk_column_id_foreign FOREIGN KEY (fk_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_kanban_view_columns_v2 nc_kanban_view_columns_v2_fk_view_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_kanban_view_columns_v2 + ADD CONSTRAINT nc_kanban_view_columns_v2_fk_view_id_foreign FOREIGN KEY (fk_view_id) REFERENCES public.nc_kanban_view_v2(fk_view_id); + + +-- +-- Name: nc_kanban_view_v2 nc_kanban_view_v2_fk_view_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_kanban_view_v2 + ADD CONSTRAINT nc_kanban_view_v2_fk_view_id_foreign FOREIGN KEY (fk_view_id) REFERENCES public.nc_views_v2(id); + + +-- +-- Name: nc_models_v2 nc_models_v2_base_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_models_v2 + ADD CONSTRAINT nc_models_v2_base_id_foreign FOREIGN KEY (base_id) REFERENCES public.nc_bases_v2(id); + + +-- +-- Name: nc_models_v2 nc_models_v2_project_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_models_v2 + ADD CONSTRAINT nc_models_v2_project_id_foreign FOREIGN KEY (project_id) REFERENCES public.nc_projects_v2(id); + + +-- +-- Name: nc_project_users_v2 nc_project_users_v2_fk_user_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_project_users_v2 + ADD CONSTRAINT nc_project_users_v2_fk_user_id_foreign FOREIGN KEY (fk_user_id) REFERENCES public.nc_users_v2(id); + + +-- +-- Name: nc_project_users_v2 nc_project_users_v2_project_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_project_users_v2 + ADD CONSTRAINT nc_project_users_v2_project_id_foreign FOREIGN KEY (project_id) REFERENCES public.nc_projects_v2(id); + + +-- +-- Name: nc_shared_views_v2 nc_shared_views_v2_fk_view_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_shared_views_v2 + ADD CONSTRAINT nc_shared_views_v2_fk_view_id_foreign FOREIGN KEY (fk_view_id) REFERENCES public.nc_views_v2(id); + + +-- +-- Name: nc_sort_v2 nc_sort_v2_fk_column_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_sort_v2 + ADD CONSTRAINT nc_sort_v2_fk_column_id_foreign FOREIGN KEY (fk_column_id) REFERENCES public.nc_columns_v2(id); + + +-- +-- Name: nc_sort_v2 nc_sort_v2_fk_view_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_sort_v2 + ADD CONSTRAINT nc_sort_v2_fk_view_id_foreign FOREIGN KEY (fk_view_id) REFERENCES public.nc_views_v2(id); + + +-- +-- Name: nc_sync_source_v2 nc_sync_source_v2_fk_user_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_sync_source_v2 + ADD CONSTRAINT nc_sync_source_v2_fk_user_id_foreign FOREIGN KEY (fk_user_id) REFERENCES public.nc_users_v2(id); + + +-- +-- Name: nc_sync_source_v2 nc_sync_source_v2_project_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_sync_source_v2 + ADD CONSTRAINT nc_sync_source_v2_project_id_foreign FOREIGN KEY (project_id) REFERENCES public.nc_projects_v2(id); + + +-- +-- Name: nc_team_users_v2 nc_team_users_v2_org_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_team_users_v2 + ADD CONSTRAINT nc_team_users_v2_org_id_foreign FOREIGN KEY (org_id) REFERENCES public.nc_orgs_v2(id); + + +-- +-- Name: nc_team_users_v2 nc_team_users_v2_user_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_team_users_v2 + ADD CONSTRAINT nc_team_users_v2_user_id_foreign FOREIGN KEY (user_id) REFERENCES public.nc_users_v2(id); + + +-- +-- Name: nc_teams_v2 nc_teams_v2_org_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_teams_v2 + ADD CONSTRAINT nc_teams_v2_org_id_foreign FOREIGN KEY (org_id) REFERENCES public.nc_orgs_v2(id); + + +-- +-- Name: nc_views_v2 nc_views_v2_fk_model_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.nc_views_v2 + ADD CONSTRAINT nc_views_v2_fk_model_id_foreign FOREIGN KEY (fk_model_id) REFERENCES public.nc_models_v2(id); + + +-- +-- PostgreSQL database dump complete +-- + +\connect postgres + +SET default_transaction_read_only = off; + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 9.6.24 +-- Dumped by pg_dump version 9.6.24 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: DATABASE postgres; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON DATABASE postgres IS 'default administrative connection database'; + + +-- +-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; + + +-- +-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; + + +-- +-- PostgreSQL database dump complete +-- + +\connect template1 + +SET default_transaction_read_only = off; + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 9.6.24 +-- Dumped by pg_dump version 9.6.24 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: DATABASE template1; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON DATABASE template1 IS 'default template for new databases'; + + +-- +-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; + + +-- +-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; + + +-- +-- PostgreSQL database dump complete +-- + +-- +-- PostgreSQL database cluster dump complete +-- + diff --git a/scripts/cypress/cypress.json b/scripts/cypress/cypress.json index 57eb00a5fe6..fa0627738d0 100644 --- a/scripts/cypress/cypress.json +++ b/scripts/cypress/cypress.json @@ -20,7 +20,8 @@ "test/pg-restTableOps.js", "test/pg-restViews.js", "test/pg-restRoles.js", - "test/pg-restMisc.js" + "test/pg-restMisc.js", + "common/9a_QuickTest.js" ], "defaultCommandTimeout": 13000, "pageLoadTimeout": 600000, diff --git a/scripts/cypress/docker-compose-pg-cy-quick.yml b/scripts/cypress/docker-compose-pg-cy-quick.yml new file mode 100644 index 00000000000..fc819055884 --- /dev/null +++ b/scripts/cypress/docker-compose-pg-cy-quick.yml @@ -0,0 +1,17 @@ +version: "2.1" + +services: + pg96: + image: postgres:9.6 + restart: always + environment: + POSTGRES_PASSWORD: password + ports: + - 5432:5432 + volumes: + - ../../packages/nocodb/tests/pg-cy-quick:/docker-entrypoint-initdb.d + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 10s + timeout: 5s + retries: 5 diff --git a/scripts/cypress/fixtures/quickTest/noco_0_91_7.db b/scripts/cypress/fixtures/quickTest/noco_0_91_7.db new file mode 100644 index 0000000000000000000000000000000000000000..49aa9dcae0f7ea83d4e8bc1b7611e1e7edec54be GIT binary patch literal 634880 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

0}8=D6OB&I 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 { + expect($element[0].value).to.have.string(config.title) + }) + cy.get(".nc-text-field-hook-event") + .find('.v-select__selection') + .contains(config.event) + .should('exist') + cy.get(".nc-text-field-hook-notification-type") + .find('.v-select__selection') + .contains(config.notification) + .should('exist') + cy.get('.nc-select-hook-url-method') + .find('.v-select__selection') + .contains(config.type) + .should('exist') + cy.get(".nc-text-field-hook-url-path") + .find('input').then(($element) => { + expect($element[0].value).to.have.string(config.url) + }) + cy.get(".nc-icon-hook-navigate-left").click({force:true}) +} + +export const genTest = (apiType, dbType) => { + if (!isTestSuiteActive(apiType, dbType)) return; + describe(`Webhook`, () => { + before(() => { + cy.task("copyFile") + loginPage.signIn(roles.owner.credentials); + projectsPage.openProject("sample"); + }); + + after(() => {}); + + it("Verify Data types", () => { + cy.openTableTab("Film", 3); + + // normal cells + for (let [key, value] of Object.entries(records)) { + mainPage.getCell(key, 1).contains(value).should("exist"); + } + + // checkbox + mainPage + .getCell("Done", 1) + .find(".mdi-check-circle-outline") + .should(records2.Done ? "exist" : "not.exist"); + + // date + + // rating + mainPage + .getCell("Rating", 1) + .find("button.mdi-star") + .should("have.length", records2.Rating); + + // LinkToAnotherRecord + mainPage.getCell("Actor", 1).scrollIntoView(); + cy.get( + ':nth-child(1) > [data-col="Actor"] > .nc-virtual-cell > .v-lazy > .d-100 > .chips > :nth-child(1) > .v-chip__content > .name' + ) + .contains(records2.Actor[0]) + .should("exist"); + cy.get( + ':nth-child(1) > [data-col="Actor"] > .nc-virtual-cell > .v-lazy > .d-100 > .chips > :nth-child(2) > .v-chip__content > .name' + ) + .contains(records2.Actor[1]) + .should("exist"); + // mainPage.getCell("Actor", 1).find(".nc-virtual-cell > .v-lazy > .d-100 > .chips").eq(0).contains("Actor1").should('exist') + // mainPage.getCell("Actor", 1).find(".nc-virtual-cell > .v-lazy > .d-100 > .chips").eq(1).contains("Actor2").should('exist') + + // lookup + mainPage.getCell("Status (from Actor)", 1).scrollIntoView(); + cy.get( + ':nth-child(1) > [data-col="Status (from Actor)"] > .nc-virtual-cell > .v-lazy > .d-flex > :nth-child(1) > .v-chip__content > div > .set-item' + ) + .contains(records2["Status (from Actor)"][0]) + .should("exist"); + cy.get( + ':nth-child(1) > [data-col="Status (from Actor)"] > .nc-virtual-cell > .v-lazy > .d-flex > :nth-child(2) > .v-chip__content > div > .set-item' + ) + .contains(records2["Status (from Actor)"][1]) + .should("exist"); + + // rollup + mainPage.getCell("RollUp", 1).scrollIntoView(); + // cy.get(':nth-child(1) > [data-col="RollUp"] > .nc-virtual-cell > .v-lazy > span').contains(records2.RollUp).should('exist') + cy.get(`:nth-child(1) > [data-col="RollUp"] > .nc-virtual-cell`) + .contains(records2.RollUp) + .should("exist"); + + // formula + mainPage.getCell("Computation", 1).scrollIntoView(); + cy.get( + `:nth-child(1) > [data-col="Computation"] > .nc-virtual-cell` + ) + .contains(records2.Computation) + .should("exist"); + + // ltar hm relation + mainPage.getCell("Producer", 1).scrollIntoView(); + cy.get( + ':nth-child(1) > [data-col="Producer"] > .nc-virtual-cell > .v-lazy > .d-100 > .chips > :nth-child(1) > .v-chip__content > .name' + ) + .contains(records2.Producer[0]) + .should("exist"); + cy.get( + ':nth-child(1) > [data-col="Producer"] > .nc-virtual-cell > .v-lazy > .d-100 > .chips > :nth-child(2) > .v-chip__content > .name' + ) + .contains(records2.Producer[1]) + .should("exist"); + + cy.closeTableTab("Film"); + }); + + it("Verify Views & Shared base", () => { + cy.openTableTab("Film", 3); + cy.get('.nc-form-view-item').eq(0) + .click({ force: true }) + + // Header & description should exist + cy.get(".nc-form") + .find('[placeholder="Form Title"]') + .contains("FormTitle") + .should("exist"); + cy.get(".nc-form") + .find('[placeholder="Add form description"]') + .contains("FormDescription") + .should("exist"); + + // modified column name & help text + cy.get(".nc-field-wrapper").eq(0) + .find('.nc-field-labels') + .contains("DisplayName") + .should('exist') + cy.get(".nc-field-wrapper").eq(0) + .find('.nc-hint') + .contains('HelpText') + .should('exist') + + cy.get(".nc-field-wrapper").eq(1) + .find('.nc-field-labels') + .contains("Email") + .should('exist') + + // add message + cy.get(".nc-form > .mx-auto") + .find("textarea").then(($element) => { + expect($element[0].value).to.have.string("Thank you for submitting the form!") + }) + + // submit another form button + cy.get(".nc-form > .mx-auto") + .find('[type="checkbox"]') + .eq(0) + .should('be.checked') + // "New form after 5 seconds" button + cy.get(".nc-form > .mx-auto") + .find('[type="checkbox"]') + .eq(1) + .should('be.checked') + // email me + cy.get(".nc-form > .mx-auto") + .find('[type="checkbox"]') + .eq(2) + .should('not.be.checked') + + cy.closeTableTab("Film"); + }); + + it("Verify Webhooks", () => { + cy.openTableTab("Actor", 25); + openWebhook(0) + verifyWebhook({ + title: "Webhook-1", + event: "After Insert", + notification: "URL", + type: "POST", + url: "http://localhost:9090/hook", + condition: false + }) + cy.get("body").type("{esc}"); + + openWebhook(1) + verifyWebhook({ + title: "Webhook-2", + event: "After Update", + notification: "URL", + type: "POST", + url: "http://localhost:9090/hook", + condition: false + }) + cy.get("body").type("{esc}"); + + openWebhook(2) + verifyWebhook({ + title: "Webhook-3", + event: "After Delete", + notification: "URL", + type: "POST", + url: "http://localhost:9090/hook", + condition: false + }) + cy.get("body").type("{esc}"); + + cy.closeTableTab("Actor"); + + }); + + it("Pagination", () => { + cy.openTableTab("Actor", 25); + + cy.get(".nc-pagination").should("exist"); + + // verify > pagination option + mainPage.getPagination(">").click(); + mainPage + .getPagination(2) + .should("have.class", "v-pagination__item--active"); + + // verify < pagination option + mainPage.getPagination("<").click(); + mainPage + .getPagination(1) + .should("have.class", "v-pagination__item--active"); + + cy.closeTableTab("Actor"); + }); + + it("Verify Fields, Filter & Sort", () => { + cy.openTableTab("Actor", 25); + cy.get(".nc-grid-view-item").eq(1).click() + + cy.get(".nc-grid-header-cell").contains('Name').should("be.visible"); + cy.get(".nc-grid-header-cell").contains('Notes').should("be.visible"); + cy.get(".nc-grid-header-cell").contains('Attachments').should("not.be.visible"); + cy.get(".nc-grid-header-cell").contains('Status').should("be.visible"); + cy.get(".nc-grid-header-cell").contains('Film').should("be.visible"); + + cy.get(".nc-fields-menu-btn").click(); + cy.getActiveMenu().find(`[type="checkbox"]`).eq(0).should('be.checked') + cy.getActiveMenu().find(`[type="checkbox"]`).eq(1).should('be.checked') + cy.getActiveMenu().find(`[type="checkbox"]`).eq(2).should('not.be.checked') + cy.getActiveMenu().find(`[type="checkbox"]`).eq(3).should('be.checked') + cy.getActiveMenu().find(`[type="checkbox"]`).eq(4).should('be.checked') + cy.get(".nc-fields-menu-btn").click(); + + cy.get(".nc-sort-menu-btn").click(); + cy.get(".nc-sort-field-select").eq(0) + .contains('Name') + .should("exist"); + cy.get(".nc-sort-dir-select").eq(0) + .contains('A -> Z') + .should("exist"); + cy.get(".nc-sort-menu-btn").click(); + + cy.get(".nc-filter-menu-btn").click(); + cy.get(".nc-filter-field-select").eq(0) + .contains('Name') + .should("exist"); + cy.get(".nc-filter-operation-select").eq(0) + .contains('is like') + .should("exist"); + + cy.get(".nc-filter-field-select").eq(1) + .contains('Name') + .should("exist"); + cy.get(".nc-filter-operation-select").eq(1) + .contains('is like') + .should("exist"); + cy.get(".nc-filter-menu-btn").click(); + + cy.closeTableTab("Actor"); + }); + + it("Views, bt relation", () => { + cy.openTableTab("Producer", 3) + cy.get('.nc-grid-view-item').should('have.length', 4) + cy.get('.nc-form-view-item').should('have.length', 4) + cy.get('.nc-gallery-view-item').should('have.length', 3) + + // LinkToAnotherRecord hm relation + mainPage.getCell("FilmRead", 1).scrollIntoView(); + cy.get( + ':nth-child(1) > [data-col="FilmRead"] > .nc-virtual-cell > .v-lazy > .d-100 > .chips > :nth-child(1) > .v-chip__content > .name' + ) + .contains('Movie-1') + .should("exist"); + + cy.closeTableTab("Producer") + }) + }); +}; + +genTest("rest", "xcdb"); + +/** + * @copyright Copyright (c) 2021, Xgene Cloud Ltd + * + * @author Raju Udava + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ diff --git a/scripts/cypress/integration/test/quickTest.js b/scripts/cypress/integration/test/quickTest.js new file mode 100644 index 00000000000..f893465ba50 --- /dev/null +++ b/scripts/cypress/integration/test/quickTest.js @@ -0,0 +1,36 @@ +let t9a = require("../common/9a_QuickTest"); +const { + setCurrentMode, +} = require("../../support/page_objects/projectConstants"); + +// use 0 as mode to execute individual files (debug mode, skip pre-configs) +// use 1 mode if noco.db doesnt contain user credentials (full run over GIT) + +const nocoTestSuite = (apiType, dbType) => { + setCurrentMode(apiType, dbType); + t9a.genTest(apiType, dbType); +}; + +nocoTestSuite("rest", "xcdb"); + +/** + * @copyright Copyright (c) 2021, Xgene Cloud Ltd + * + * @author Raju Udava + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ diff --git a/scripts/cypress/plugins/index.js b/scripts/cypress/plugins/index.js index 56697819e72..84d7ffd6188 100644 --- a/scripts/cypress/plugins/index.js +++ b/scripts/cypress/plugins/index.js @@ -11,7 +11,7 @@ // This function is called when a project is opened or re-opened (e.g. due to // the project's config changing) -const { rmdir } = require("fs"); +const { rmdir, copyFile } = require("fs"); // https://stackoverflow.com/questions/61934443/read-excel-files-in-cypress const readXlsx = require("./read-xlsx"); @@ -26,6 +26,18 @@ module.exports = (on, config) => { // register utility tasks to read and parse Excel files on("task", { + copyFile() { + console.log("copyFile", __dirname) + return new Promise((resolve, reject) => { + copyFile("./scripts/cypress/fixtures/quickTest/noco_0_91_7.db", "./packages/nocodb/noco.db", (err) => { + if(err) { + console.log(err) + return reject(err) + } + resolve(null); + }) + }) + }, deleteFolder(folderName) { console.log("deleting folder %s", folderName); From 759c1d1c5b3bfabee7ef51cb4e6ce094fe635d91 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Tue, 14 Jun 2022 17:27:22 +0530 Subject: [PATCH 002/134] chore: ci-cd trigger for PR drafts Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- .github/workflows/ci-cd.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index f10a65c79bd..567506879ca 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -12,6 +12,7 @@ on: - ".github/workflows/ci-cd.yml" pull_request: branches: [develop] + types: [opened, synchronize, reopened, converted_to_draft] paths: - "packages/nc-gui/**" - "scripts/cypress/**" From 125ce229ae7dcc151b39c527fd613fa14ef09c48 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Tue, 14 Jun 2022 17:39:51 +0530 Subject: [PATCH 003/134] CICD: disable draftPR trigger Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- .github/workflows/ci-cd.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index 567506879ca..f10a65c79bd 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -12,7 +12,6 @@ on: - ".github/workflows/ci-cd.yml" pull_request: branches: [develop] - types: [opened, synchronize, reopened, converted_to_draft] paths: - "packages/nc-gui/**" - "scripts/cypress/**" From d39eff2c55b760e4debf5eb1218b471f36600f1d Mon Sep 17 00:00:00 2001 From: wingkwong Date: Wed, 15 Jun 2022 11:18:21 +0000 Subject: [PATCH 004/134] [create-pull-request] automated change Signed-off-by: GitHub --- packages/nc-gui/package-lock.json | 44 ++++++++++++++++++++----------- packages/nc-gui/package.json | 2 +- packages/nocodb/package-lock.json | 44 ++++++++++++++++++++----------- packages/nocodb/package.json | 4 +-- 4 files changed, 59 insertions(+), 35 deletions(-) diff --git a/packages/nc-gui/package-lock.json b/packages/nc-gui/package-lock.json index 7ce8e1c6105..fbd056984f3 100644 --- a/packages/nc-gui/package-lock.json +++ b/packages/nc-gui/package-lock.json @@ -28,7 +28,7 @@ "monaco-editor": "^0.19.3", "monaco-themes": "^0.2.5", "nano-assign": "^1.0.1", - "nocodb-sdk": "0.91.10", + "nocodb-sdk": "file:../nocodb-sdk", "nuxt": "^2.14.0", "odometer": "^0.4.8", "papaparse": "^5.3.1", @@ -76,7 +76,6 @@ }, "../nocodb-sdk": { "version": "0.91.10", - "extraneous": true, "license": "MIT", "dependencies": { "axios": "^0.21.1", @@ -10899,16 +10898,8 @@ } }, "node_modules/nocodb-sdk": { - "version": "0.91.10", - "resolved": "https://registry.npmjs.org/nocodb-sdk/-/nocodb-sdk-0.91.10.tgz", - "integrity": "sha512-mdddLp+HgpPJwrKwmZrOPvjHaEbKbjdUP8vkJ9icQPXTJizclPBLugKhvp2hPlNPfJ3BIdfAj38RKBYlFu+now==", - "dependencies": { - "axios": "^0.21.1", - "jsep": "^1.3.6" - }, - "engines": { - "node": ">=10" - } + "resolved": "../nocodb-sdk", + "link": true }, "node_modules/node-fetch": { "version": "2.6.7", @@ -26326,12 +26317,33 @@ } }, "nocodb-sdk": { - "version": "0.91.10", - "resolved": "https://registry.npmjs.org/nocodb-sdk/-/nocodb-sdk-0.91.10.tgz", - "integrity": "sha512-mdddLp+HgpPJwrKwmZrOPvjHaEbKbjdUP8vkJ9icQPXTJizclPBLugKhvp2hPlNPfJ3BIdfAj38RKBYlFu+now==", + "version": "file:../nocodb-sdk", "requires": { + "@ava/typescript": "^1.1.1", + "@istanbuljs/nyc-config-typescript": "^1.0.1", + "@typescript-eslint/eslint-plugin": "^4.0.1", + "@typescript-eslint/parser": "^4.0.1", + "ava": "^3.12.1", "axios": "^0.21.1", - "jsep": "^1.3.6" + "codecov": "^3.5.0", + "cspell": "^4.1.0", + "cz-conventional-changelog": "^3.3.0", + "eslint": "^7.8.0", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-functional": "^3.0.2", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-prettier": "^4.0.0", + "gh-pages": "^3.1.0", + "jsep": "^1.3.6", + "npm-run-all": "^4.1.5", + "nyc": "^15.1.0", + "open-cli": "^6.0.1", + "prettier": "^2.1.1", + "standard-version": "^9.0.0", + "ts-node": "^9.0.0", + "typedoc": "^0.19.0", + "typescript": "^4.0.2" } }, "node-fetch": { diff --git a/packages/nc-gui/package.json b/packages/nc-gui/package.json index d9c89e366d3..d817b5908bb 100644 --- a/packages/nc-gui/package.json +++ b/packages/nc-gui/package.json @@ -31,7 +31,7 @@ "monaco-editor": "^0.19.3", "monaco-themes": "^0.2.5", "nano-assign": "^1.0.1", - "nocodb-sdk": "0.91.10", + "nocodb-sdk": "file:../nocodb-sdk", "nuxt": "^2.14.0", "odometer": "^0.4.8", "papaparse": "^5.3.1", diff --git a/packages/nocodb/package-lock.json b/packages/nocodb/package-lock.json index 893e87a850b..78eedbbaa48 100644 --- a/packages/nocodb/package-lock.json +++ b/packages/nocodb/package-lock.json @@ -74,7 +74,7 @@ "nc-lib-gui": "0.91.10", "nc-plugin": "0.1.2", "ncp": "^2.0.0", - "nocodb-sdk": "0.91.10", + "nocodb-sdk": "file:../nocodb-sdk", "nodemailer": "^6.4.10", "object-hash": "^3.0.0", "ora": "^4.0.4", @@ -232,7 +232,6 @@ }, "../nocodb-sdk": { "version": "0.91.10", - "extraneous": true, "license": "MIT", "dependencies": { "axios": "^0.21.1", @@ -16571,16 +16570,8 @@ "dev": true }, "node_modules/nocodb-sdk": { - "version": "0.91.10", - "resolved": "https://registry.npmjs.org/nocodb-sdk/-/nocodb-sdk-0.91.10.tgz", - "integrity": "sha512-mdddLp+HgpPJwrKwmZrOPvjHaEbKbjdUP8vkJ9icQPXTJizclPBLugKhvp2hPlNPfJ3BIdfAj38RKBYlFu+now==", - "dependencies": { - "axios": "^0.21.1", - "jsep": "^1.3.6" - }, - "engines": { - "node": ">=10" - } + "resolved": "../nocodb-sdk", + "link": true }, "node_modules/node-addon-api": { "version": "2.0.0", @@ -38231,12 +38222,33 @@ "dev": true }, "nocodb-sdk": { - "version": "0.91.10", - "resolved": "https://registry.npmjs.org/nocodb-sdk/-/nocodb-sdk-0.91.10.tgz", - "integrity": "sha512-mdddLp+HgpPJwrKwmZrOPvjHaEbKbjdUP8vkJ9icQPXTJizclPBLugKhvp2hPlNPfJ3BIdfAj38RKBYlFu+now==", + "version": "file:../nocodb-sdk", "requires": { + "@ava/typescript": "^1.1.1", + "@istanbuljs/nyc-config-typescript": "^1.0.1", + "@typescript-eslint/eslint-plugin": "^4.0.1", + "@typescript-eslint/parser": "^4.0.1", + "ava": "^3.12.1", "axios": "^0.21.1", - "jsep": "^1.3.6" + "codecov": "^3.5.0", + "cspell": "^4.1.0", + "cz-conventional-changelog": "^3.3.0", + "eslint": "^7.8.0", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-functional": "^3.0.2", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-prettier": "^4.0.0", + "gh-pages": "^3.1.0", + "jsep": "^1.3.6", + "npm-run-all": "^4.1.5", + "nyc": "^15.1.0", + "open-cli": "^6.0.1", + "prettier": "^2.1.1", + "standard-version": "^9.0.0", + "ts-node": "^9.0.0", + "typedoc": "^0.19.0", + "typescript": "^4.0.2" } }, "node-addon-api": { diff --git a/packages/nocodb/package.json b/packages/nocodb/package.json index 33dff339bf9..6574bbef060 100644 --- a/packages/nocodb/package.json +++ b/packages/nocodb/package.json @@ -157,7 +157,7 @@ "nc-lib-gui": "0.91.10", "nc-plugin": "0.1.2", "ncp": "^2.0.0", - "nocodb-sdk": "0.91.10", + "nocodb-sdk": "file:../nocodb-sdk", "nodemailer": "^6.4.10", "object-hash": "^3.0.0", "ora": "^4.0.4", @@ -257,4 +257,4 @@ "**/*.spec.js" ] } -} \ No newline at end of file +} From 95aca2b6667c66b70d16b38cb4fd689ebb05c763 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Wed, 15 Jun 2022 23:41:12 +0530 Subject: [PATCH 005/134] feat: introduce new env and password validations Signed-off-by: Pranav C --- .../authentication/passwordValidateMixin.js | 98 ++++---- .../pages/user/authentication/signin.vue | 5 +- .../en/getting-started/installation.md | 13 ++ .../content/en/setup-and-usages/dashboard.md | 4 +- packages/nocodb-sdk/src/index.ts | 5 +- .../nocodb-sdk/src/lib/passwordHelpers.ts | 41 ++++ packages/nocodb/src/lib/Noco.ts | 3 +- .../lib/meta/api/userApi/initAdminFromEnv.ts | 209 ++++++++++++++++++ .../src/lib/meta/api/userApi/userApis.ts | 21 +- .../src/lib/meta/helpers/NcPluginMgrv2.ts | 66 ++++-- packages/nocodb/src/lib/models/Plugin.ts | 4 +- 11 files changed, 395 insertions(+), 74 deletions(-) create mode 100644 packages/nocodb-sdk/src/lib/passwordHelpers.ts create mode 100644 packages/nocodb/src/lib/meta/api/userApi/initAdminFromEnv.ts diff --git a/packages/nc-gui/pages/user/authentication/passwordValidateMixin.js b/packages/nc-gui/pages/user/authentication/passwordValidateMixin.js index 71ea5c406cf..6422c4920c6 100644 --- a/packages/nc-gui/pages/user/authentication/passwordValidateMixin.js +++ b/packages/nc-gui/pages/user/authentication/passwordValidateMixin.js @@ -1,3 +1,5 @@ +import { validatePassword } from 'nocodb-sdk' + export default { data: () => ({ passwordProgress: 0, @@ -20,54 +22,62 @@ export default { return this.formUtil.progressColorValue }, PasswordValidate(p) { - if (!p) { - this.passwordProgress = 0 - this.passwordValidateMsg = 'At least 8 letters with one Uppercase, one number and one special letter' - return false - } - - let msg = '' - let validation = true - let progress = 0 - - if (!(p.length >= 8)) { - msg += 'Atleast 8 letters. ' - validation = validation && false - } else { - progress = Math.min(100, progress + 25) - } - - if (!(p.match(/.*[A-Z].*/))) { - msg += 'One Uppercase Letter. ' - validation = validation && false - } else { - progress = Math.min(100, progress + 25) - } - - if (!(p.match(/.*[0-9].*/))) { - msg += 'One Number. ' - validation = validation && false - } else { - progress = Math.min(100, progress + 25) - } - - if (!(p.match(/[$&+,:;=?@#|'<>.^*()%!_-]/))) { - msg += 'One special letter. ' - validation = validation && false - } else { - progress = Math.min(100, progress + 25) - } + const { error, progress, valid } = validatePassword(p) + if (valid) { return true } this.formUtil.passwordProgress = progress - // console.log('progress', progress); - // console.log('color', this.progressColor(this.formUtil.passwordProgress)); this.progressColorValue = this.progressColor(this.formUtil.passwordProgress) - this.formUtil.passwordValidateMsg = msg - - // console.log('msg', msg, validation); - - return validation + this.formUtil.passwordValidateMsg = error + return error + // if (!p) { + // this.passwordProgress = 0 + // this.passwordValidateMsg = 'At least 8 letters with one Uppercase, one number and one special letter' + // return false + // } + // + // let msg = '' + // let validation = true + // let progress = 0 + // + // if (!(p.length >= 8)) { + // msg += 'Atleast 8 letters. ' + // validation = validation && false + // } else { + // progress = Math.min(100, progress + 25) + // } + // + // if (!(p.match(/.*[A-Z].*/))) { + // msg += 'One Uppercase Letter. ' + // validation = validation && false + // } else { + // progress = Math.min(100, progress + 25) + // } + // + // if (!(p.match(/.*[0-9].*/))) { + // msg += 'One Number. ' + // validation = validation && false + // } else { + // progress = Math.min(100, progress + 25) + // } + // + // if (!(p.match(/[$&+,:;=?@#|'<>.^*()%!_-]/))) { + // msg += 'One special letter. ' + // validation = validation && false + // } else { + // progress = Math.min(100, progress + 25) + // } + // + // this.formUtil.passwordProgress = progress + // // console.log('progress', progress); + // // console.log('color', this.progressColor(this.formUtil.passwordProgress)); + // this.progressColorValue = this.progressColor(this.formUtil.passwordProgress) + // + // this.formUtil.passwordValidateMsg = msg + // + // // console.log('msg', msg, validation); + // + // return validation } } diff --git a/packages/nc-gui/pages/user/authentication/signin.vue b/packages/nc-gui/pages/user/authentication/signin.vue index ee0583675a8..fb4688d27a1 100644 --- a/packages/nc-gui/pages/user/authentication/signin.vue +++ b/packages/nc-gui/pages/user/authentication/signin.vue @@ -244,10 +244,7 @@ export default { ], password: [ // Password is required - v => !!v || this.$t('msg.error.signUpRules.passwdRequired'), - // You password must be atleast 8 characters - v => - (v && v.length >= 8) || this.$t('msg.error.signUpRules.passwdLength') + v => !!v || this.$t('msg.error.signUpRules.passwdRequired') ] }, formUtil: { diff --git a/packages/noco-docs/content/en/getting-started/installation.md b/packages/noco-docs/content/en/getting-started/installation.md index 9fd3b52f7f5..ccdac4ac4fe 100644 --- a/packages/noco-docs/content/en/getting-started/installation.md +++ b/packages/noco-docs/content/en/getting-started/installation.md @@ -206,6 +206,19 @@ It is mandatory to configure `NC_DB` environment variables for production usecas | AWS_SECRET_ACCESS_KEY | No | For Litestream - S3 secret access key | If Litestream is configured and NC_DB is not present. SQLite gets backed up to S3 | | | AWS_BUCKET | No | For Litestream - S3 bucket | If Litestream is configured and NC_DB is not present. SQLite gets backed up to S3 | | | AWS_BUCKET_PATH | No | For Litestream - S3 bucket path (like folder within S3 bucket) | If Litestream is configured and NC_DB is not present. SQLite gets backed up to S3 | | +| NC_SMTP_FROM | No | For SMTP plugin - Email sender address | | | +| NC_SMTP_HOST | No | For SMTP plugin - SMTP host value | | | +| NC_SMTP_PORT | No | For SMTP plugin - SMTP port value | | | +| NC_SMTP_USERNAME | No | For SMTP plugin (Optional) - SMTP username value for authentication | | | +| NC_SMTP_PASSWORD | No | For SMTP plugin (Optional) - SMTP password value for authentication | | | +| NC_SMTP_SECURE | No | For SMTP plugin (Optional) - To enable secure set value as `true` any other value treated as false | | | +| NC_SMTP_IGNORE_TLS | No | For SMTP plugin (Optional) - To ignore tls set value as `true` any other value treated as false. For more info visit https://nodemailer.com/smtp/ | | | +| NC_S3_BUCKET_NAME | No | For S3 storage plugin - AWS S3 bucket name | | | +| NC_S3_REGION | No | For S3 storage plugin - AWS S3 region | | | +| NC_S3_ACCESS_KEY | No | For S3 storage plugin - AWS access key credential for accessing resource | | | +| NC_S3_ACCESS_SECRET | No | For S3 storage plugin - AWS access secret credential for accessing resource | | | +| NC_ADMIN_EMAIL | No | For updating/creating super admin with provided email and password | | | +| NC_ADMIN_PASSWORD | No | For updating/creating super admin with provided email and password. Your password should have at least 8 letters with one uppercase, one number and one special letter(Allowed special chars $&+,:;=?@#|'.^*()%!_-" ) | | | ### AWS ECS (Fargate) diff --git a/packages/noco-docs/content/en/setup-and-usages/dashboard.md b/packages/noco-docs/content/en/setup-and-usages/dashboard.md index 34ed955cacf..6a77d034194 100644 --- a/packages/noco-docs/content/en/setup-and-usages/dashboard.md +++ b/packages/noco-docs/content/en/setup-and-usages/dashboard.md @@ -16,7 +16,7 @@ Click `Let's Begin` button to sign up. Enter your work email and your password. - + Your password has at least 8 letters with one uppercase, one number and one special letter @@ -98,4 +98,4 @@ Tip 3: You can click Edit Connection JSON and specify the schema you want to use Click `Test Database Connection` to see if the connection can be established or not. NocoDB creates a new **empty database** with specified parameters if the database doesn't exist. -![image](https://user-images.githubusercontent.com/35857179/163136039-ad521d74-6996-4173-84ba-cfc55392c3b7.png) \ No newline at end of file +![image](https://user-images.githubusercontent.com/35857179/163136039-ad521d74-6996-4173-84ba-cfc55392c3b7.png) diff --git a/packages/nocodb-sdk/src/index.ts b/packages/nocodb-sdk/src/index.ts index 2d808fcc032..805152d812a 100644 --- a/packages/nocodb-sdk/src/index.ts +++ b/packages/nocodb-sdk/src/index.ts @@ -5,5 +5,6 @@ export * from './lib/sqlUi'; export * from './lib/globals'; export * from './lib/helperFunctions'; export * from './lib/formulaHelpers'; -export {default as UITypes, isVirtualCol} from './lib/UITypes'; -export {default as CustomAPI} from './lib/CustomAPI'; +export * from './lib/passwordHelpers'; +export { default as UITypes, isVirtualCol } from './lib/UITypes'; +export { default as CustomAPI } from './lib/CustomAPI'; diff --git a/packages/nocodb-sdk/src/lib/passwordHelpers.ts b/packages/nocodb-sdk/src/lib/passwordHelpers.ts new file mode 100644 index 00000000000..2136a548091 --- /dev/null +++ b/packages/nocodb-sdk/src/lib/passwordHelpers.ts @@ -0,0 +1,41 @@ +export function validatePassword(p) { + let error = ''; + let progress = 0; + let hint = null; + let valid = true; + if (!p) { + error = + 'At least 8 letters with one Uppercase, one number and one special letter'; + valid = false; + } else { + if (!(p.length >= 8)) { + error += 'Atleast 8 letters. '; + valid = false; + } else { + progress = Math.min(100, progress + 25); + } + + if (!p.match(/.*[A-Z].*/)) { + error += 'One Uppercase Letter. '; + valid = false; + } else { + progress = Math.min(100, progress + 25); + } + + if (!p.match(/.*[0-9].*/)) { + error += 'One Number. '; + valid = false; + } else { + progress = Math.min(100, progress + 25); + } + + if (!p.match(/[$&+,:;=?@#|'<>.^*()%!_-]/)) { + error += 'One special letter. '; + hint = "Allowed special character list : $&+,:;=?@#|'<>.^*()%!_-"; + valid = false; + } else { + progress = Math.min(100, progress + 25); + } + } + return { error, valid, progress, hint }; +} diff --git a/packages/nocodb/src/lib/Noco.ts b/packages/nocodb/src/lib/Noco.ts index 2807cfddb43..c0439bfb756 100644 --- a/packages/nocodb/src/lib/Noco.ts +++ b/packages/nocodb/src/lib/Noco.ts @@ -42,6 +42,7 @@ import { Tele } from 'nc-help'; import * as http from 'http'; import weAreHiring from './utils/weAreHiring'; import getInstance from './utils/getInstance'; +import initAdminFromEnv from './meta/api/userApi/initAdminFromEnv'; const log = debug('nc:app'); require('dotenv').config(); @@ -186,8 +187,8 @@ export default class Noco { } await Noco._ncMeta.metaInit(); - await this.readOrGenJwtSecret(); + await initAdminFromEnv(); await NcUpgrader.upgrade({ ncMeta: Noco._ncMeta }); diff --git a/packages/nocodb/src/lib/meta/api/userApi/initAdminFromEnv.ts b/packages/nocodb/src/lib/meta/api/userApi/initAdminFromEnv.ts new file mode 100644 index 00000000000..81885ed12dd --- /dev/null +++ b/packages/nocodb/src/lib/meta/api/userApi/initAdminFromEnv.ts @@ -0,0 +1,209 @@ +import User from '../../../models/User'; +import { v4 as uuidv4 } from 'uuid'; +import { promisify } from 'util'; +import { Tele } from 'nc-help'; + +import bcrypt from 'bcryptjs'; +import Noco from '../../../Noco'; +import { MetaTable } from '../../../utils/globals'; +import ProjectUser from '../../../models/ProjectUser'; +import { validatePassword } from 'nocodb-sdk'; +import boxen from 'boxen'; + +const { isEmail } = require('validator'); +const rolesLevel = { owner: 0, creator: 1, editor: 2, commenter: 3, viewer: 4 }; + +export default async function initAdminFromEnv(_ncMeta = Noco.ncMeta) { + if (process.env.NC_ADMIN_EMAIL && process.env.NC_ADMIN_PASSWORD) { + if (!isEmail(process.env.NC_ADMIN_EMAIL?.trim())) { + console.log( + '\n', + boxen( + `Provided admin email '${process.env.NC_ADMIN_EMAIL}' is not valid`, + { + title: 'Invalid admin email', + padding: 1, + borderStyle: 'double', + titleAlignment: 'center', + borderColor: 'red' + } + ), + '\n' + ); + process.exit(1); + } + + const { valid, error, hint } = validatePassword( + process.env.NC_ADMIN_PASSWORD + ); + if (!valid) { + console.log( + '\n', + boxen(`${error}${hint ? `\n\n${hint}` : ''}`, { + title: 'Invalid admin password', + padding: 1, + borderStyle: 'double', + titleAlignment: 'center', + borderColor: 'red' + }), + '\n' + ); + process.exit(1); + } + + let ncMeta; + try { + ncMeta = await _ncMeta.startTransaction(); + const email = process.env.NC_ADMIN_EMAIL.toLowerCase().trim(); + + const salt = await promisify(bcrypt.genSalt)(10); + const password = await promisify(bcrypt.hash)( + process.env.NC_ADMIN_PASSWORD, + salt + ); + const email_verification_token = uuidv4(); + + // if super admin not present + if (await User.isFirst(ncMeta)) { + const roles = 'user,super'; + + // roles = 'owner,creator,editor' + Tele.emit('evt', { + evt_type: 'project:invite', + count: 1 + }); + + await User.insert( + { + firstname: '', + lastname: '', + email, + salt, + password, + email_verification_token, + roles + }, + ncMeta + ); + } else { + const salt = await promisify(bcrypt.genSalt)(10); + const password = await promisify(bcrypt.hash)( + process.env.NC_ADMIN_PASSWORD, + salt + ); + const email_verification_token = uuidv4(); + const superUser = await ncMeta.metaGet2(null, null, MetaTable.USERS, { + roles: 'user,super' + }); + + if (email !== superUser.email) { + // update admin email and password and migrate projects + // if user already present and associated with some project + + // check user account already present with the new admin email + const existingUserWithNewEmail = await User.getByEmail(email, ncMeta); + + if (existingUserWithNewEmail) { + // get all project access belongs to the existing account + // and migrate to the admin account + const existingUserProjects = await ncMeta.metaList2( + null, + null, + MetaTable.PROJECT_USERS, + { + condition: { fk_user_id: existingUserWithNewEmail.id } + } + ); + + for (const existingUserProject of existingUserProjects) { + const userProject = await ProjectUser.get( + existingUserProject.project_id, + superUser.id, + ncMeta + ); + + // if admin user already have access to the project + // then update role based on the highest access level + if (userProject) { + if ( + rolesLevel[userProject.roles] > + rolesLevel[existingUserProject.roles] + ) { + await ProjectUser.update( + userProject.project_id, + superUser.id, + existingUserProject.roles, + ncMeta + ); + } + } else { + // if super doesn't have access then add the access + await ProjectUser.insert( + { + ...existingUserProject, + fk_user_id: superUser.id + }, + ncMeta + ); + } + // delete the old project access entry from DB + await ProjectUser.delete( + existingUserProject.project_id, + existingUserProject.fk_user_id, + ncMeta + ); + } + + // delete existing user + ncMeta.metaDelete( + null, + null, + MetaTable.USERS, + existingUserWithNewEmail.id + ); + + // Update email and password of super admin account + await User.update( + superUser.id, + { + salt, + email, + password, + email_verification_token + }, + ncMeta + ); + } else { + // if email's are not different update the password and hash + await User.update( + superUser.id, + { + salt, + email, + password, + email_verification_token + }, + ncMeta + ); + } + } else { + // if email's are not different update the password and hash + await User.update( + superUser.id, + { + salt, + password, + email_verification_token + }, + ncMeta + ); + } + } + await ncMeta.commit(); + } catch (e) { + console.log('Error occurred while updating/creating admin user'); + console.log(e); + await ncMeta.rollback(e); + } + } +} diff --git a/packages/nocodb/src/lib/meta/api/userApi/userApis.ts b/packages/nocodb/src/lib/meta/api/userApi/userApis.ts index 7a6fa31a3d6..18243d9455d 100644 --- a/packages/nocodb/src/lib/meta/api/userApi/userApis.ts +++ b/packages/nocodb/src/lib/meta/api/userApi/userApis.ts @@ -1,5 +1,5 @@ import { Request, Response } from 'express'; -import { TableType } from 'nocodb-sdk'; +import { TableType, validatePassword } from 'nocodb-sdk'; import catchError, { NcError } from '../../helpers/catchError'; const { isEmail } = require('validator'); import * as ejs from 'ejs'; @@ -31,6 +31,12 @@ export async function signup(req: Request, res: Response) { } = req.body; let { password } = req.body; + // validate password and throw error if password is satisfying the conditions + const { valid, error } = validatePassword(password); + if (!valid) { + NcError.badRequest(`Password : ${error}`); + } + if (!isEmail(_email)) { NcError.badRequest(`Invalid email`); } @@ -262,6 +268,13 @@ async function passwordChange(req: Request, res): Promise { if (!currentPassword || !newPassword) { return NcError.badRequest('Missing new/old password'); } + + // validate password and throw error if password is satisfying the conditions + const { valid, error } = validatePassword(newPassword); + if (!valid) { + NcError.badRequest(`Password : ${error}`); + } + const user = await User.getByEmail((req as any).user.email); const hashedPassword = await promisify(bcrypt.hash)( currentPassword, @@ -381,6 +394,12 @@ async function passwordReset(req, res): Promise { NcError.badRequest('Email registered via social account'); } + // validate password and throw error if password is satisfying the conditions + const { valid, error } = validatePassword(req.body.password); + if (!valid) { + NcError.badRequest(`Password : ${error}`); + } + const salt = await promisify(bcrypt.genSalt)(10); const password = await promisify(bcrypt.hash)(req.body.password, salt); diff --git a/packages/nocodb/src/lib/meta/helpers/NcPluginMgrv2.ts b/packages/nocodb/src/lib/meta/helpers/NcPluginMgrv2.ts index 0e5057887d2..4f048380010 100644 --- a/packages/nocodb/src/lib/meta/helpers/NcPluginMgrv2.ts +++ b/packages/nocodb/src/lib/meta/helpers/NcPluginMgrv2.ts @@ -31,6 +31,7 @@ import Noco from '../../Noco'; import Local from '../../v1-legacy/plugins/adapters/storage/Local'; import { MetaTable } from '../../utils/globals'; import { PluginCategory } from 'nocodb-sdk'; +import Plugin from '../../models/Plugin'; const defaultPlugins = [ SlackPluginConfig, @@ -97,25 +98,54 @@ class NcPluginMgrv2 { pluginConfig.id ); } + } + await this.initPluginsFromEnv(); + } - /* init only the active plugins */ - // if (pluginConfig?.active) { - // const tempPlugin = new plugin.builder(this.app, plugin); - // - // this.activePlugins.push(tempPlugin); - // - // if (pluginConfig?.input) { - // pluginConfig.input = JSON.parse(pluginConfig.input); - // } - // - // try { - // await tempPlugin.init(pluginConfig?.input); - // } catch (e) { - // console.log( - // `Plugin(${plugin?.title}) initialization failed : ${e.message}` - // ); - // } - // } + private static async initPluginsFromEnv() { + /* + * NC_S3_BUCKET_NAME + * NC_S3_REGION + * NC_S3_ACCESS_KEY + * NC_S3_ACCESS_SECRET + * */ + + if ( + process.env.NC_S3_BUCKET_NAME && + process.env.NC_S3_REGION && + process.env.NC_S3_ACCESS_KEY && + process.env.NC_S3_ACCESS_SECRET + ) { + const s3Plugin = await Plugin.getPluginByTitle(S3PluginConfig.title); + await Plugin.update(s3Plugin.id, { + active: true, + input: JSON.stringify({ + bucket: process.env.NC_S3_BUCKET_NAME, + region: process.env.NC_S3_REGION, + access_key: process.env.NC_S3_ACCESS_KEY, + access_secret: process.env.NC_S3_ACCESS_SECRET + }) + }); + } + + if ( + process.env.NC_SMTP_FROM && + process.env.NC_SMTP_HOST && + process.env.NC_SMTP_PORT + ) { + const smtpPlugin = await Plugin.getPluginByTitle(SMTPPluginConfig.title); + await Plugin.update(smtpPlugin.id, { + active: true, + input: JSON.stringify({ + from: process.env.NC_SMTP_FROM, + host: process.env.NC_SMTP_HOST, + port: process.env.NC_SMTP_PORT, + username: process.env.NC_SMTP_USERNAME, + password: process.env.NC_SMTP_PASSWORD, + secure: process.env.NC_SMTP_SECURE, + ignoreTLS: process.env.NC_SMTP_IGNORE_TLS + }) + }); } } diff --git a/packages/nocodb/src/lib/models/Plugin.ts b/packages/nocodb/src/lib/models/Plugin.ts index ee080136510..bd952e4af4c 100644 --- a/packages/nocodb/src/lib/models/Plugin.ts +++ b/packages/nocodb/src/lib/models/Plugin.ts @@ -91,7 +91,7 @@ export default class Plugin implements PluginType { /** * get plugin by title */ - public static async getPluginByTitle(title: string) { + public static async getPluginByTitle(title: string, ncMeta = Noco.ncMeta) { let plugin = title && (await NocoCache.get( @@ -99,7 +99,7 @@ export default class Plugin implements PluginType { CacheGetType.TYPE_OBJECT )); if (!plugin) { - plugin = await Noco.ncMeta.metaGet2(null, null, MetaTable.PLUGIN, { + plugin = await ncMeta.metaGet2(null, null, MetaTable.PLUGIN, { title }); await NocoCache.set(`${CacheScope.PLUGIN}:${title}`, plugin); From 4bf6fd8c5b845000d7847ef271967e79fece4257 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Thu, 16 Jun 2022 12:51:26 +0800 Subject: [PATCH 006/134] feat: duration --- .../project/spreadsheet/components/Cell.vue | 4 +- .../spreadsheet/components/EditColumn.vue | 51 ++-- .../spreadsheet/components/EditableCell.vue | 17 +- .../components/cell/DurationCell.vue | 69 +++++ .../components/editColumn/DurationOptions.vue | 126 ++++++++ .../components/editableCell/DurationCell.vue | 126 ++++++++ .../project/spreadsheet/mixins/cell.js | 5 +- packages/nc-gui/helpers/durationHelper.js | 192 ++++++++++++ packages/nocodb-sdk/src/lib/sqlUi/MssqlUi.ts | 2 +- packages/nocodb-sdk/src/lib/sqlUi/MysqlUi.ts | 2 +- packages/nocodb-sdk/src/lib/sqlUi/PgUi.ts | 2 +- packages/nocodb-sdk/src/lib/sqlUi/SqliteUi.ts | 2 +- .../nocodb/src/lib/meta/api/columnApis.ts | 6 + .../integration/common/3e_duration_column.js | 275 ++++++++++++++++++ .../integration/test/pg-restTableOps.js | 3 + .../cypress/integration/test/restTableOps.js | 3 + .../integration/test/xcdb-restTableOps.js | 3 + 17 files changed, 859 insertions(+), 29 deletions(-) create mode 100644 packages/nc-gui/components/project/spreadsheet/components/cell/DurationCell.vue create mode 100644 packages/nc-gui/components/project/spreadsheet/components/editColumn/DurationOptions.vue create mode 100644 packages/nc-gui/components/project/spreadsheet/components/editableCell/DurationCell.vue create mode 100644 packages/nc-gui/helpers/durationHelper.js create mode 100644 scripts/cypress/integration/common/3e_duration_column.js diff --git a/packages/nc-gui/components/project/spreadsheet/components/Cell.vue b/packages/nc-gui/components/project/spreadsheet/components/Cell.vue index 5dd090cedc9..76966531a8a 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/Cell.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/Cell.vue @@ -17,6 +17,7 @@ + @@ -37,10 +38,11 @@ import BooleanCell from '~/components/project/spreadsheet/components/cell/Boolea import EmailCell from '~/components/project/spreadsheet/components/cell/EmailCell' import RatingCell from '~/components/project/spreadsheet/components/editableCell/RatingCell' import CurrencyCell from '@/components/project/spreadsheet/components/cell/CurrencyCell' +import DurationCell from '@/components/project/spreadsheet/components/cell/DurationCell' export default { name: 'TableCell', - components: { RatingCell, EmailCell, TimeCell, DateTimeCell, DateCell, JsonCell, UrlCell, EditableAttachmentCell, EnumCell, SetListCell, BooleanCell, CurrencyCell }, + components: { RatingCell, EmailCell, TimeCell, DateTimeCell, DateCell, JsonCell, UrlCell, EditableAttachmentCell, EnumCell, SetListCell, BooleanCell, CurrencyCell, DurationCell }, mixins: [cell], props: ['value', 'dbAlias', 'isLocked', 'selected', 'column'], computed: { diff --git a/packages/nc-gui/components/project/spreadsheet/components/EditColumn.vue b/packages/nc-gui/components/project/spreadsheet/components/EditColumn.vue index 15d7c07ac70..03d75d602c0 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/EditColumn.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/EditColumn.vue @@ -172,7 +172,6 @@ :column="newColumn" :meta="meta" /> - - - @@ -572,6 +580,7 @@ import { validateColumnName } from '~/helpers' import RatingOptions from '~/components/project/spreadsheet/components/editColumn/RatingOptions' import CheckboxOptions from '~/components/project/spreadsheet/components/editColumn/CheckboxOptions' import CurrencyOptions from '@/components/project/spreadsheet/components/editColumn/CurrencyOptions' +import DurationOptions from '@/components/project/spreadsheet/components/editColumn/DurationOptions' const columnToValidate = [UITypes.Email, UITypes.URL, UITypes.PhoneNumber] @@ -587,7 +596,8 @@ export default { DlgLabelSubmitCancel, RelationOptions, CustomSelectOptions, - CurrencyOptions + CurrencyOptions, + DurationOptions }, props: { nodes: Object, @@ -617,7 +627,8 @@ export default { UITypes.Lookup, UITypes.Rollup, UITypes.SpecificDBType, - UITypes.Formula + UITypes.Formula, + UITypes.Duration ].includes(this.newColumn && this.newColumn.uidt) }, uiTypes() { @@ -631,7 +642,7 @@ export default { ] }, isEditDisabled() { - return this.editColumn && this.sqlUi === SqliteUi + return this.editColumn && this.sqlUi === SqliteUi && this.column.uidt !== UITypes.Duration }, isSQLite() { return this.sqlUi === SqliteUi diff --git a/packages/nc-gui/components/project/spreadsheet/components/EditableCell.vue b/packages/nc-gui/components/project/spreadsheet/components/EditableCell.vue index 5ce6c7e4280..321388584f3 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/EditableCell.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/EditableCell.vue @@ -35,6 +35,15 @@ v-on="$listeners" /> + + + + + + + + + + diff --git a/packages/nc-gui/components/project/spreadsheet/components/editColumn/DurationOptions.vue b/packages/nc-gui/components/project/spreadsheet/components/editColumn/DurationOptions.vue new file mode 100644 index 00000000000..d39a198c428 --- /dev/null +++ b/packages/nc-gui/components/project/spreadsheet/components/editColumn/DurationOptions.vue @@ -0,0 +1,126 @@ + + + + + + + diff --git a/packages/nc-gui/components/project/spreadsheet/components/editableCell/DurationCell.vue b/packages/nc-gui/components/project/spreadsheet/components/editableCell/DurationCell.vue new file mode 100644 index 00000000000..d39a198c428 --- /dev/null +++ b/packages/nc-gui/components/project/spreadsheet/components/editableCell/DurationCell.vue @@ -0,0 +1,126 @@ + + + + + + + diff --git a/packages/nc-gui/components/project/spreadsheet/mixins/cell.js b/packages/nc-gui/components/project/spreadsheet/mixins/cell.js index 85fb8c52389..dd900e99e44 100644 --- a/packages/nc-gui/components/project/spreadsheet/mixins/cell.js +++ b/packages/nc-gui/components/project/spreadsheet/mixins/cell.js @@ -67,8 +67,10 @@ export default { }, isCurrency() { return this.uiDatatype === 'Currency' + }, + isDuration() { + return this.uiDatatype === UITypes.Duration } - } } /** @@ -76,6 +78,7 @@ export default { * * @author Naveen MR * @author Pranav C Balan + * @author Wing-Kam Wong * * @license GNU AGPL version 3 or any later version * diff --git a/packages/nc-gui/helpers/durationHelper.js b/packages/nc-gui/helpers/durationHelper.js new file mode 100644 index 00000000000..d9580148583 --- /dev/null +++ b/packages/nc-gui/helpers/durationHelper.js @@ -0,0 +1,192 @@ +export const durationOptions = [ + { + id: 0, + title: 'h:mm', + example: '(e.g. 1:23)', + regex: /(\d+)(?::(\d+))?/ + }, { + id: 1, + title: 'h:mm:ss', + example: '(e.g. 3:45, 1:23:40)', + regex: /(\d+)?(?::(\d+))?(?::(\d+))?/ + }, { + id: 2, + title: 'h:mm:ss.s', + example: '(e.g. 3:34.6, 1:23:40.0)', + regex: /(\d+)?(?::(\d+))?(?::(\d+))?(?:.(\d{0,4})?)?/ + }, { + id: 3, + title: 'h:mm:ss.ss', + example: '(e.g. 3.45.67, 1:23:40.00)', + regex: /(\d+)?(?::(\d+))?(?::(\d+))?(?:.(\d{0,4})?)?/ + }, { + id: 4, + title: 'h:mm:ss.sss', + example: '(e.g. 3.45.678, 1:23:40.000)', + regex: /(\d+)?(?::(\d+))?(?::(\d+))?(?:.(\d{0,4})?)?/ + } +] + +// pad zero +// mm && ss +// e.g. 3 -> 03 +// e.g. 12 -> 12 +// sss +// e.g. 1 -> 001 +// e.g. 10 -> 010 +const padZero = (val, isSSS = false) => { + return (val + '').padStart(isSSS ? 3 : 2, '0') +} + +export const convertMS2Duration = (val, durationType) => { + if (val === null || val === undefined) { return val } + // 600.000 s --> 10:00 (10 mins) + const milliseconds = Math.round((val % 1) * 1000) + const centiseconds = Math.round(milliseconds / 10) + const deciseconds = Math.round(centiseconds / 10) + const hours = Math.floor(parseInt(val, 10) / (60 * 60)) + const minutes = Math.floor((parseInt(val, 10) - (hours * 60 * 60)) / 60) + const seconds = parseInt(val, 10) - (hours * 60 * 60) - (minutes * 60) + + if (durationType === 0) { + // h:mm + return `${padZero(hours)}:${padZero(minutes + (seconds >= 30))}` + } else if (durationType === 1) { + // h:mm:ss + return `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}` + } else if (durationType === 2) { + // h:mm:ss.s + return `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}.${deciseconds}` + } else if (durationType === 3) { + // h:mm:ss.ss + return `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}.${padZero(centiseconds)}` + } else if (durationType === 4) { + // h:mm:ss.sss + return `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}.${padZero(milliseconds, true)}` + } + return val +} + +export const convertDurationToSeconds = (val, durationType) => { + // 10:00 (10 mins) -> 600.000 s + const res = { + _ms: null, + _isValid: true + } + const durationRegex = durationOptions[durationType].regex + if (durationRegex.test(val)) { + let h, mm, ss + const groups = val.match(durationRegex) + if (groups[0] && groups[1] && !groups[2] && !groups[3] && !groups[4]) { + const val = parseInt(groups[1], 10) + if (groups.input.slice(-1) === ':') { + // e.g. 30: + h = groups[1] + mm = 0 + ss = 0 + } else if (durationType === 0) { + // consider it as minutes + // e.g. 360 -> 06:00 + h = Math.floor(val / 60) + mm = Math.floor((val - ((h * 3600)) / 60)) + ss = 0 + } else { + // consider it as seconds + // e.g. 3600 -> 01:00:00 + h = Math.floor(groups[1] / 3600) + mm = Math.floor(groups[1] / 60) % 60 + ss = val % 60 + } + } else if (durationType !== 0 && groups[1] && groups[2] && !groups[3]) { + // 10:10 means mm:ss instead of h:mm + // 10:10:10 means h:mm:ss + h = 0 + mm = groups[1] + ss = groups[2] + } else { + h = groups[1] || 0 + mm = groups[2] || 0 + ss = groups[3] || 0 + } + + if (durationType === 0) { + // h:mm + res._sec = h * 3600 + mm * 60 + } else if (durationType === 1) { + // h:mm:ss + res._sec = h * 3600 + mm * 60 + ss * 1 + } else if (durationType === 2) { + // h:mm:ss.s (deciseconds) + const ds = groups[4] || 0 + const len = Math.log(ds) * Math.LOG10E + 1 | 0 + const ms = ( + // e.g. len = 4: 1234 -> 1, 1456 -> 1 + // e.g. len = 3: 123 -> 1, 191 -> 2 + // e.g. len = 2: 12 -> 1 , 16 -> 2 + len === 4 + ? Math.round(ds / 1000) + : len === 3 + ? Math.round(ds / 100) + : len === 2 + ? Math.round(ds / 10) + // take whatever it is + : ds + ) * 100 + res._sec = h * 3600 + mm * 60 + ss * 1 + ms / 1000 + } else if (durationType === 3) { + // h:mm:ss.ss (centiseconds) + const cs = groups[4] || 0 + const len = Math.log(cs) * Math.LOG10E + 1 | 0 + const ms = ( + // e.g. len = 4: 1234 -> 12, 1285 -> 13 + // e.g. len = 3: 123 -> 12, 128 -> 13 + // check the third digit + len === 4 + ? Math.round(cs / 100) + : len === 3 + ? Math.round(cs / 10) + // take whatever it is + : cs + ) * 10 + res._sec = h * 3600 + mm * 60 + ss * 1 + ms / 1000 + } else if (durationType === 4) { + // h:mm:ss.sss (milliseconds) + let ms = groups[4] || 0 + const len = Math.log(ms) * Math.LOG10E + 1 | 0 + ms = ( + // e.g. 1235 -> 124 + // e.g. 1234 -> 123 + len === 4 + ? Math.round(ms / 10) + // take whatever it is + : ms + ) * 1 + res._sec = h * 3600 + mm * 60 + ss * 1 + ms / 1000 + } + } else { + res._isValid = false + } + return res +} + +/** + * @copyright Copyright (c) 2021, Xgene Cloud Ltd + * + * @author Wing-Kam Wong + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ diff --git a/packages/nocodb-sdk/src/lib/sqlUi/MssqlUi.ts b/packages/nocodb-sdk/src/lib/sqlUi/MssqlUi.ts index 8b44d13078f..40461614d37 100644 --- a/packages/nocodb-sdk/src/lib/sqlUi/MssqlUi.ts +++ b/packages/nocodb-sdk/src/lib/sqlUi/MssqlUi.ts @@ -1144,7 +1144,7 @@ export class MssqlUi { colProp.dt = 'double'; break; case 'Duration': - colProp.dt = 'int'; + colProp.dt = 'decimal'; break; case 'Rating': colProp.dt = 'int'; diff --git a/packages/nocodb-sdk/src/lib/sqlUi/MysqlUi.ts b/packages/nocodb-sdk/src/lib/sqlUi/MysqlUi.ts index ab1e2688186..5c8bc82dbaa 100644 --- a/packages/nocodb-sdk/src/lib/sqlUi/MysqlUi.ts +++ b/packages/nocodb-sdk/src/lib/sqlUi/MysqlUi.ts @@ -1036,7 +1036,7 @@ export class MysqlUi { colProp.dt = 'double'; break; case 'Duration': - colProp.dt = 'int'; + colProp.dt = 'decimal'; break; case 'Rating': colProp.dt = 'int'; diff --git a/packages/nocodb-sdk/src/lib/sqlUi/PgUi.ts b/packages/nocodb-sdk/src/lib/sqlUi/PgUi.ts index d49690518f6..096ec77ad18 100644 --- a/packages/nocodb-sdk/src/lib/sqlUi/PgUi.ts +++ b/packages/nocodb-sdk/src/lib/sqlUi/PgUi.ts @@ -1660,7 +1660,7 @@ export class PgUi { colProp.dt = 'double precision'; break; case 'Duration': - colProp.dt = 'int8'; + colProp.dt = 'decimal'; break; case 'Rating': colProp.dt = 'smallint'; diff --git a/packages/nocodb-sdk/src/lib/sqlUi/SqliteUi.ts b/packages/nocodb-sdk/src/lib/sqlUi/SqliteUi.ts index 41a2f816f93..5a780c65be4 100644 --- a/packages/nocodb-sdk/src/lib/sqlUi/SqliteUi.ts +++ b/packages/nocodb-sdk/src/lib/sqlUi/SqliteUi.ts @@ -853,7 +853,7 @@ export class SqliteUi { colProp.dt = 'double'; break; case 'Duration': - colProp.dt = 'integer'; + colProp.dt = 'decimal'; break; case 'Rating': colProp.dt = 'integer'; diff --git a/packages/nocodb/src/lib/meta/api/columnApis.ts b/packages/nocodb/src/lib/meta/api/columnApis.ts index 2e942107f80..e68aff846a5 100644 --- a/packages/nocodb/src/lib/meta/api/columnApis.ts +++ b/packages/nocodb/src/lib/meta/api/columnApis.ts @@ -503,6 +503,12 @@ export async function columnAdd(req: Request, res: Response) { default: { colBody = getColumnPropsFromUIDT(colBody, base); + if (colBody.uidt === UITypes.Duration) { + colBody.dtxp = '20'; + // by default, colBody.dtxs is 2 + // Duration column needs more that that + colBody.dtxs = '4'; + } const tableUpdateBody = { ...table, tn: table.table_name, diff --git a/scripts/cypress/integration/common/3e_duration_column.js b/scripts/cypress/integration/common/3e_duration_column.js new file mode 100644 index 00000000000..331f6d97fcc --- /dev/null +++ b/scripts/cypress/integration/common/3e_duration_column.js @@ -0,0 +1,275 @@ +import { mainPage } from "../../support/page_objects/mainPage"; +import { + isTestSuiteActive, +} from "../../support/page_objects/projectConstants"; + +export const genTest = (apiType, dbType) => { + if (!isTestSuiteActive(apiType, dbType)) return; + + describe(`${apiType.toUpperCase()} api - DURATION`, () => { + const tableName = "DurationTable"; + + // to retrieve few v-input nodes from their label + // + const fetchParentFromLabel = (label) => { + cy.get("label").contains(label).parents(".v-input").click(); + }; + + // Run once before test- create table + // + before(() => { + mainPage.tabReset(); + cy.createTable(tableName); + }); + + after(() => { + cy.deleteTable(tableName); + }); + + // Routine to create a new look up column + // + const addDurationColumn = (columnName, durationFormat) => { + // (+) icon at end of column header (to add a new column) + // opens up a pop up window + // + cy.get(".new-column-header").click(); + + // Column name + cy.get(".nc-column-name-input input").clear().type(`${columnName}`); + + // Column data type + cy.get(".nc-ui-dt-dropdown").click(); + cy.getActiveMenu().contains("Duration").click(); + + // Configure Child table & column names + fetchParentFromLabel("Duration Format"); + cy.getActiveMenu().contains(durationFormat).click(); + + // click on Save + cy.get(".nc-col-create-or-edit-card").contains("Save").click(); + + // Verify if column exists. + // + cy.get(`th:contains(${columnName})`).should("exist"); + }; + + // routine to delete column + // + const deleteColumnByName = (columnName) => { + // verify if column exists before delete + cy.get(`th:contains(${columnName})`).should("exist"); + + // delete opiton visible on mouse-over + cy.get(`th:contains(${columnName}) .mdi-menu-down`) + .trigger("mouseover") + .click(); + + // delete/ confirm on pop-up + cy.get(".nc-column-delete").click(); + cy.getActiveModal().find("button:contains(Confirm)").click(); + + // validate if deleted (column shouldnt exist) + cy.get(`th:contains(${columnName})`).should("not.exist"); + }; + + // routine to edit column + // + const editColumnByName = (oldName, newName, newDurationFormat) => { + // verify if column exists before delete + cy.get(`th:contains(${oldName})`).should("exist"); + + // delete opiton visible on mouse-over + cy.get(`th:contains(${oldName}) .mdi-menu-down`) + .trigger("mouseover") + .click(); + + // edit/ save on pop-up + cy.get(".nc-column-edit").click(); + cy.get(".nc-column-name-input input").clear().type(newName); + + // Configure Child table & column names + fetchParentFromLabel("Duration Format"); + cy.getActiveMenu().contains(newDurationFormat).click(); + + cy.get(".nc-col-create-or-edit-card") + .contains("Save") + .click({ force: true }); + + cy.toastWait("Duration column updated successfully"); + + // validate if deleted (column shouldnt exist) + cy.get(`th:contains(${oldName})`).should("not.exist"); + cy.get(`th:contains(${newName})`).should("exist"); + }; + + const addDurationData = (colName, index, cellValue, expectedValue, isNewRow = false) => { + if (isNewRow) { + cy.get(".nc-add-new-row-btn:visible").should("exist"); + cy.wait(500) + cy.get(".nc-add-new-row-btn").click({ force: true }); + } else { + mainPage.getRow(index).find(".nc-row-expand-icon").click({ force: true }); + } + cy.get(".duration-cell-wrapper > input").first().should('exist').type(cellValue); + cy.getActiveModal().find("button").contains("Save row").click({ force: true }); + cy.toastWait("Row updated successfully"); + mainPage.getCell(colName, index).find('input').then(($e) => { + expect($e[0].value).to.equal(expectedValue) + }) + } + + /////////////////////////////////////////////////// + // Test case + { + // Duration: h:mm + it("Duration: h:mm", () => { + addDurationColumn("NC_DURATION_0", "h:mm (e.g. 1:23)"); + addDurationData("NC_DURATION_0", 1, "1:30", "01:30", true); + addDurationData("NC_DURATION_0", 2, "30", "00:30", true); + addDurationData("NC_DURATION_0", 3, "60", "01:00", true); + addDurationData("NC_DURATION_0", 4, "80", "01:20", true); + addDurationData("NC_DURATION_0", 5, "12:34", "12:34", true); + addDurationData("NC_DURATION_0", 6, "15:130", "17:10", true); + addDurationData("NC_DURATION_0", 7, "123123", "2052:03", true); + }); + + it("Duration: Edit Column NC_DURATION_0", () => { + editColumnByName( + "NC_DURATION_0", + "NC_DURATION_EDITED_0", + "h:mm:ss (e.g. 3:45, 1:23:40)" + ); + }); + + it("Duration: Delete column", () => { + deleteColumnByName("NC_DURATION_EDITED_0"); + }); + } + + { + // Duration: h:mm:ss + it("Duration: h:mm:ss", () => { + addDurationColumn("NC_DURATION_1", "h:mm:ss (e.g. 3:45, 1:23:40)"); + addDurationData("NC_DURATION_1", 1, "11:22:33", "11:22:33"); + addDurationData("NC_DURATION_1", 2, "1234", "00:20:34"); + addDurationData("NC_DURATION_1", 3, "50", "00:00:50"); + addDurationData("NC_DURATION_1", 4, "1:1111", "00:19:31"); + addDurationData("NC_DURATION_1", 5, "1:11:1111", "01:29:31"); + addDurationData("NC_DURATION_1", 6, "15:130", "00:17:10"); + addDurationData("NC_DURATION_1", 7, "123123", "34:12:03"); + }); + + it("Duration: Edit Column NC_DURATION_1", () => { + editColumnByName( + "NC_DURATION_1", + "NC_DURATION_EDITED_1", + "h:mm:ss.s (e.g. 3:34.6, 1:23:40.0)" + ); + }); + + it("Duration: Delete column", () => { + deleteColumnByName("NC_DURATION_EDITED_1"); + }); + } + + { + // h:mm:ss.s + it("Duration: h:mm:ss.s", () => { + addDurationColumn("NC_DURATION_2", "h:mm:ss.s (e.g. 3:34.6, 1:23:40.0)"); + addDurationData("NC_DURATION_2", 1, "1234", "00:20:34.0"); + addDurationData("NC_DURATION_2", 2, "12:34", "00:12:34.0"); + addDurationData("NC_DURATION_2", 3, "12:34:56", "12:34:56.0"); + addDurationData("NC_DURATION_2", 4, "12:34:999", "12:50:39.0"); + addDurationData("NC_DURATION_2", 5, "12:999:56", "28:39:56.0"); + addDurationData("NC_DURATION_2", 6, "12:34:56.12", "12:34:56.1"); + addDurationData("NC_DURATION_2", 7, "12:34:56.199", "12:34:56.2"); + }); + + it("Duration: Edit Column NC_DURATION_2", () => { + editColumnByName( + "NC_DURATION_2", + "NC_DURATION_EDITED_2", + "h:mm:ss (e.g. 3:45, 1:23:40)" + ); + }); + + it("Duration: Delete column", () => { + deleteColumnByName("NC_DURATION_EDITED_2"); + }); + } + + { + // h:mm:ss.ss + it("Duration: h:mm:ss.ss", () => { + addDurationColumn("NC_DURATION_3", "h:mm:ss.ss (e.g. 3.45.67, 1:23:40.00)"); + addDurationData("NC_DURATION_3", 1, "1234", "00:20:34.00"); + addDurationData("NC_DURATION_3", 2, "12:34", "00:12:34.00"); + addDurationData("NC_DURATION_3", 3, "12:34:56", "12:34:56.00"); + addDurationData("NC_DURATION_3", 4, "12:34:999", "12:50:39.00"); + addDurationData("NC_DURATION_3", 5, "12:999:56", "28:39:56.00"); + addDurationData("NC_DURATION_3", 6, "12:34:56.12", "12:34:56.12"); + addDurationData("NC_DURATION_3", 7, "12:34:56.199", "12:34:56.20"); + }); + + it("Duration: Edit Column NC_DURATION_3", () => { + editColumnByName( + "NC_DURATION_3", + "NC_DURATION_EDITED_3", + "h:mm:ss.ss (e.g. 3.45.67, 1:23:40.00)" + ); + }); + + it("Duration: Delete column", () => { + deleteColumnByName("NC_DURATION_EDITED_3"); + }); + } + + { + // h:mm:ss.sss + it("Duration: h:mm:ss.sss", () => { + addDurationColumn("NC_DURATION_4", "h:mm:ss.sss (e.g. 3.45.678, 1:23:40.000)"); + addDurationData("NC_DURATION_4", 1, "1234", "00:20:34.000"); + addDurationData("NC_DURATION_4", 2, "12:34", "00:12:34.000"); + addDurationData("NC_DURATION_4", 3, "12:34:56", "12:34:56.000"); + addDurationData("NC_DURATION_4", 4, "12:34:999", "12:50:39.000"); + addDurationData("NC_DURATION_4", 5, "12:999:56", "28:39:56.000"); + addDurationData("NC_DURATION_4", 6, "12:34:56.12", "12:34:56.012"); + addDurationData("NC_DURATION_4", 7, "12:34:56.199", "12:34:56.199"); + }); + + it("Duration: Edit Column NC_DURATION_4", () => { + editColumnByName( + "NC_DURATION_4", + "NC_DURATION_EDITED_4", + "h:mm (e.g. 1:23)" + ); + }); + + it("Duration: Delete column", () => { + deleteColumnByName("NC_DURATION_EDITED_4"); + }); + } + }); +}; + +/** + * @copyright Copyright (c) 2021, Xgene Cloud Ltd + * + * @author Wing-Kam Wong + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ \ No newline at end of file diff --git a/scripts/cypress/integration/test/pg-restTableOps.js b/scripts/cypress/integration/test/pg-restTableOps.js index 3c009b940a6..a19ce2a4ca9 100644 --- a/scripts/cypress/integration/test/pg-restTableOps.js +++ b/scripts/cypress/integration/test/pg-restTableOps.js @@ -11,6 +11,7 @@ let t3a = require("../common/3a_filter_sort_fields_operations"); let t3b = require("../common/3b_formula_column"); let t3c = require("../common/3c_lookup_column"); let t3d = require("../common/3d_rollup_column"); +let t3e = require("../common/3e_duration_column"); const { setCurrentMode, } = require("../../support/page_objects/projectConstants"); @@ -38,6 +39,7 @@ const nocoTestSuite = (apiType, dbType) => { // t3b.genTest(apiType, dbType); t3c.genTest(apiType, dbType); t3d.genTest(apiType, dbType); + t3e.genTest(apiType, dbType); }; nocoTestSuite("rest", "postgres"); @@ -46,6 +48,7 @@ nocoTestSuite("rest", "postgres"); * @copyright Copyright (c) 2021, Xgene Cloud Ltd * * @author Raju Udava + * @author Wing-Kam Wong * * @license GNU AGPL version 3 or any later version * diff --git a/scripts/cypress/integration/test/restTableOps.js b/scripts/cypress/integration/test/restTableOps.js index 750cf629f1d..c0db808f3b8 100644 --- a/scripts/cypress/integration/test/restTableOps.js +++ b/scripts/cypress/integration/test/restTableOps.js @@ -11,6 +11,7 @@ let t3a = require("../common/3a_filter_sort_fields_operations"); let t3b = require("../common/3b_formula_column"); let t3c = require("../common/3c_lookup_column"); let t3d = require("../common/3d_rollup_column"); +let t3e = require("../common/3e_duration_column"); const { setCurrentMode, } = require("../../support/page_objects/projectConstants"); @@ -38,6 +39,7 @@ const nocoTestSuite = (apiType, dbType) => { t3b.genTest(apiType, dbType); t3c.genTest(apiType, dbType); t3d.genTest(apiType, dbType); + t3e.genTest(apiType, dbType); }; nocoTestSuite("rest", "mysql"); @@ -46,6 +48,7 @@ nocoTestSuite("rest", "mysql"); * @copyright Copyright (c) 2021, Xgene Cloud Ltd * * @author Raju Udava + * @author Wing-Kam Wong * * @license GNU AGPL version 3 or any later version * diff --git a/scripts/cypress/integration/test/xcdb-restTableOps.js b/scripts/cypress/integration/test/xcdb-restTableOps.js index cc05e6f79a9..ac1428f946b 100644 --- a/scripts/cypress/integration/test/xcdb-restTableOps.js +++ b/scripts/cypress/integration/test/xcdb-restTableOps.js @@ -11,6 +11,7 @@ let t3a = require("../common/3a_filter_sort_fields_operations"); let t3b = require("../common/3b_formula_column"); let t3c = require("../common/3c_lookup_column"); let t3d = require("../common/3d_rollup_column"); +let t3e = require("../common/3e_duration_column"); const { setCurrentMode, } = require("../../support/page_objects/projectConstants"); @@ -38,6 +39,7 @@ const nocoTestSuite = (apiType, dbType) => { t3b.genTest(apiType, dbType); t3c.genTest(apiType, dbType); t3d.genTest(apiType, dbType); + t3e.genTest(apiType, dbType); }; nocoTestSuite("rest", "xcdb"); @@ -46,6 +48,7 @@ nocoTestSuite("rest", "xcdb"); * @copyright Copyright (c) 2021, Xgene Cloud Ltd * * @author Raju Udava + * @author Wing-Kam Wong * * @license GNU AGPL version 3 or any later version * From 8a6c388ffda45736ef2349223efb8d864684e9d7 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Thu, 16 Jun 2022 13:23:06 +0800 Subject: [PATCH 007/134] enhancement: allow CONCAT on anything. ref: #2304 --- .../spreadsheet/components/editColumn/FormulaOptions.vue | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/nc-gui/components/project/spreadsheet/components/editColumn/FormulaOptions.vue b/packages/nc-gui/components/project/spreadsheet/components/editColumn/FormulaOptions.vue index a2cebccb06a..d0df405eed1 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/editColumn/FormulaOptions.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/editColumn/FormulaOptions.vue @@ -267,10 +267,7 @@ export default { // validate data type if (parsedTree.callee.type === jsep.IDENTIFIER) { const expectedType = formulas[parsedTree.callee.name].type - if ( - expectedType === formulaTypes.NUMERIC || - expectedType === formulaTypes.STRING - ) { + if (expectedType === formulaTypes.NUMERIC) { parsedTree.arguments.map(arg => this.validateAgainstType(arg, expectedType, null, typeErrors)) } else if (expectedType === formulaTypes.DATE) { if (parsedTree.callee.name === 'DATEADD') { From 6231f07108431736074675d40d726bc1f5e2c4b7 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Thu, 16 Jun 2022 12:23:31 +0530 Subject: [PATCH 008/134] docs: primary-key Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- .../en/setup-and-usages/primary-key.md | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 packages/noco-docs/content/en/setup-and-usages/primary-key.md diff --git a/packages/noco-docs/content/en/setup-and-usages/primary-key.md b/packages/noco-docs/content/en/setup-and-usages/primary-key.md new file mode 100644 index 00000000000..f9c0edc9903 --- /dev/null +++ b/packages/noco-docs/content/en/setup-and-usages/primary-key.md @@ -0,0 +1,44 @@ +--- +title: "Primary Key" +description: "Primary Key" +position: 574 +category: "Product" +menuTitle: "Primary Key" +--- + +## What is a Primary Key ? +- Key in a relational database table that is unique for each record + +## What is the use of Primary Key ? +- As it uniquely identifies an individual record of a table, it is used internally by NocoDB for all operations associated with a record + +## Primary Key in NocoDB +- Primary Key that gets defined / used in NocoDB depends on how underlying table was created. Summary is captured below +1. From UI, Create new table / Import from Excel / Import from CSV + 1. An `ID` [datatype: Integer] system field created by default during table creation is used as primary key + 2. Additional system fields `created-at`, `updated-at` are inserted by default & can be omitted optionally; these fields can be deleted after table creation +2. Connect to existing external database + 1. Existing `primary key` field defined for a table is retained as is; NocoDB doesn't insert a new ID field + 2. Additional system fields `created-at`, `updated-at` are not inserted by default +3. Import from Airtable + 1. Airtable record ID is marked as primary key for imported records, and is mapped to field `ncRecordId` [datatype: varchar] + 2. If a new record is inserted after migration & if ncRecordId field was omitted during record insertion - auto generated string will be inserted by NocoDB + 3. Computed hash value for the entire record is stored in system field `ncRecordHash` + 4. Additional system fields `created-at`, `updated-at` are not inserted by default +4. Create new table using SDK / API + 1. No default primary key field is introduced by NocoDB. It has to be explicitly specified during table creation (using attribute `pk: true`) + +## What if Primary Key was missing? +It is possible to have a table without any primary key. +- External database table can be created without primary key configuration. +- New table can be created using SDK / API without primary key +In such scenario's, new records can be created in NocoDB for this table, but records can't be updated or deleted [as there is now way for NocoDB to uniquely identify these records] + +#### Example : Primary Key & optional system fields during new table creation + + +#### Example : Show System Fields + + +## Can I change the Primary Key to another column within tables ? +- You can't update Primary Key from NocoDB UI. You can reconfigure it at database level directly & trigger `metasync` explicitly From 514829b613d8f34130f4ea8ae8b11b4363dea4a2 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Thu, 16 Jun 2022 12:26:17 +0530 Subject: [PATCH 009/134] docs: insert reference images --- packages/noco-docs/content/en/setup-and-usages/primary-key.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/noco-docs/content/en/setup-and-usages/primary-key.md b/packages/noco-docs/content/en/setup-and-usages/primary-key.md index f9c0edc9903..9ad313fb724 100644 --- a/packages/noco-docs/content/en/setup-and-usages/primary-key.md +++ b/packages/noco-docs/content/en/setup-and-usages/primary-key.md @@ -35,10 +35,10 @@ It is possible to have a table without any primary key. In such scenario's, new records can be created in NocoDB for this table, but records can't be updated or deleted [as there is now way for NocoDB to uniquely identify these records] #### Example : Primary Key & optional system fields during new table creation - +![Screenshot 2022-06-16 at 12 15 43 PM](https://user-images.githubusercontent.com/86527202/174010350-8610b9c1-a761-4bff-a53d-dc728df47e1b.png) #### Example : Show System Fields - +![Screenshot 2022-06-16 at 12 16 07 PM](https://user-images.githubusercontent.com/86527202/174010379-9e300d42-ad89-4653-afa2-f70fca407ca8.png) ## Can I change the Primary Key to another column within tables ? - You can't update Primary Key from NocoDB UI. You can reconfigure it at database level directly & trigger `metasync` explicitly From 78c757e94918df344b87b3352f1a558fe28ce9c0 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Thu, 16 Jun 2022 15:17:50 +0800 Subject: [PATCH 010/134] fix: handle csv / excel import url extension --- .../nc-gui/components/import/QuickImport.vue | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/nc-gui/components/import/QuickImport.vue b/packages/nc-gui/components/import/QuickImport.vue index 3ac14f1a685..25925e841fc 100644 --- a/packages/nc-gui/components/import/QuickImport.vue +++ b/packages/nc-gui/components/import/QuickImport.vue @@ -60,11 +60,17 @@ v-model="url" hide-details="auto" type="url" - :label="quickImportType == 'excel' ? $t('msg.info.excelURL') : $t('msg.info.csvURL') " + :label="quickImportType === 'excel' ? $t('msg.info.excelURL') : $t('msg.info.csvURL') " class="caption" outlined dense - :rules="[v => !!v || $t('general.required') ]" + :rules=" + [ + v => !!v || $t('general.required'), + v => quickImportType === 'excel' ? + (/.*\.(xls|xlsx|xlsm|ods|ots)/.test(v) || errorMessages.importExcel) : + (/.*\.(csv)/.test(v) || errorMessages.importCSV), + ]" /> @@ -213,7 +219,11 @@ export default { parserConfig: { maxRowsToParse: 500 }, - filename: '' + filename: '', + errorMessages: { + importExcel: "Target file is not an accepted file type. The accepted file types are .xls, .xlsx, .xlsm, .ods, .ots!", + importCSV: "Target file is not an accepted file type. The accepted file type is .csv!" + } } }, computed: { @@ -322,11 +332,11 @@ export default { if (this.quickImportType === 'excel') { if (!/.*\.(xls|xlsx|xlsm|ods|ots)/.test(file.name)) { - return this.$toast.error('Dropped file is not an accepted file type. The accepted file types are .xls, .xlsx, .xlsm, .ods, .ots!').goAway(3000) + return this.$toast.error(this.errorMessages.importExcel).goAway(3000) } } else if (this.quickImportType === 'csv') { if (!/.*\.(csv)/.test(file.name)) { - return this.$toast.error('Dropped file is not an accepted file type. The accepted file type is .csv!').goAway(3000) + return this.$toast.error(this.errorMessages.importCSV).goAway(3000) } } this._file(file) From e069491d39565714f42b4a46b89f4ec2db549441 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Thu, 16 Jun 2022 15:37:38 +0800 Subject: [PATCH 011/134] fix: wrong DurationOptions --- .../components/editColumn/DurationOptions.vue | 156 ++++++------------ 1 file changed, 51 insertions(+), 105 deletions(-) diff --git a/packages/nc-gui/components/project/spreadsheet/components/editColumn/DurationOptions.vue b/packages/nc-gui/components/project/spreadsheet/components/editColumn/DurationOptions.vue index d39a198c428..4386131fd45 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/editColumn/DurationOptions.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/editColumn/DurationOptions.vue @@ -1,126 +1,72 @@ - - From a3120c570d3a75b340f63e94a61b988f3308e370 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Thu, 16 Jun 2022 15:51:57 +0530 Subject: [PATCH 012/134] test: airtable import (WIP) Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- scripts/cypress/cypress.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cypress/cypress.json b/scripts/cypress/cypress.json index 57eb00a5fe6..c22682c1f49 100644 --- a/scripts/cypress/cypress.json +++ b/scripts/cypress/cypress.json @@ -47,7 +47,7 @@ "screenshot": false, "airtable": { "apiKey": "keyn1MR87qgyUsYg4", - "sharedBase": "https://airtable.com/shrkSQdtKNzUfAbIY" + "sharedBase": "https://airtable.com/shr4z0qmh6dg5s3eB" } }, "fixturesFolder": "scripts/cypress/fixtures", From f870fc6e7360f05be125e00dae10d086628c4f38 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Thu, 16 Jun 2022 15:57:05 +0530 Subject: [PATCH 013/134] test: disable quick tests trigger from CI-CD Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- .github/workflows/ci-cd.yml | 90 ------------------------------------- 1 file changed, 90 deletions(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index f10a65c79bd..02d321f178f 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -559,96 +559,6 @@ jobs: name: cypress-xcdb-restMisc-run-cache-snapshots path: scripts/cypress/screenshots retention-days: 2 - cy-quick-sqlite: - runs-on: ubuntu-20.04 - steps: - - name: Setup Node - uses: actions/setup-node@v1 - with: - node-version: 16.15.0 - - name: Checkout - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - name: Cache node modules - uses: actions/cache@v2 - env: - cache-name: cache-node-modules - - with: - # npm cache files are stored in `~/.npm` on Linux/macOS - path: ~/.npm - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - name: Set env - run: echo "NODE_ENV=test" >> $GITHUB_ENV - - name: Cypress run - uses: cypress-io/github-action@v2 - with: - start: | - npm run build:common - npm run start:api:cache - npm run start:web - docker-compose -f ./scripts/docker-compose-cypress.yml up -d - spec: "./scripts/cypress/integration/common/9a_QuickTest.js" - wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js" - wait-on-timeout: 1200 - config-file: scripts/cypress/cypress.json - - name: Upload screenshots - if: always() - uses: actions/upload-artifact@v2 - with: - name: cy-quick-sqlite-snapshots - path: scripts/cypress/screenshots - retention-days: 2 - cy-quick-pg: - runs-on: ubuntu-20.04 - steps: - - name: Setup Node - uses: actions/setup-node@v1 - with: - node-version: 16.15.0 - - name: Checkout - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - name: Cache node modules - uses: actions/cache@v2 - env: - cache-name: cache-node-modules - - with: - # npm cache files are stored in `~/.npm` on Linux/macOS - path: ~/.npm - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - name: Set env - run: echo "NODE_ENV=test" >> $GITHUB_ENV - - name: Cypress run - uses: cypress-io/github-action@v2 - with: - start: | - npm run build:common - npm run start:api:cache:pg - npm run start:web - docker-compose -f ./scripts/cypress/docker-compose-pg-cy-quick.yml up -d - spec: "./scripts/cypress/integration/common/9a_QuickTest.js" - wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js" - wait-on-timeout: 1200 - config-file: scripts/cypress/cypress.json - - name: Upload screenshots - if: always() - uses: actions/upload-artifact@v2 - with: - name: cy-quick-pg-snapshots - path: scripts/cypress/screenshots - retention-days: 2 # docker: # runs-on: ubuntu-latest # steps: From f23253ddb80cca78422cf3f874b2884d89d871e5 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 17 Jun 2022 01:57:51 +0800 Subject: [PATCH 014/134] fix: set responseType based on type --- packages/nc-gui/components/import/QuickImport.vue | 2 +- .../templateParsers/ExcelUrlTemplateAdapter.js | 5 +++-- packages/nocodb/src/lib/meta/api/utilApis.ts | 15 ++++++++++++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/nc-gui/components/import/QuickImport.vue b/packages/nc-gui/components/import/QuickImport.vue index 25925e841fc..e402724eb27 100644 --- a/packages/nc-gui/components/import/QuickImport.vue +++ b/packages/nc-gui/components/import/QuickImport.vue @@ -298,7 +298,7 @@ export default { templateGenerator = new ExcelTemplateAdapter(name, val, this.parserConfig) break case 'url': - templateGenerator = new ExcelUrlTemplateAdapter(val, this.$store, this.parserConfig, this.$api) + templateGenerator = new ExcelUrlTemplateAdapter(val, this.$store, this.parserConfig, this.$api, this.quickImportType) break } await templateGenerator.init() diff --git a/packages/nc-gui/components/import/templateParsers/ExcelUrlTemplateAdapter.js b/packages/nc-gui/components/import/templateParsers/ExcelUrlTemplateAdapter.js index a263ccc0fd9..64b36f9220d 100644 --- a/packages/nc-gui/components/import/templateParsers/ExcelUrlTemplateAdapter.js +++ b/packages/nc-gui/components/import/templateParsers/ExcelUrlTemplateAdapter.js @@ -1,19 +1,20 @@ import ExcelTemplateAdapter from '~/components/import/templateParsers/ExcelTemplateAdapter' export default class ExcelUrlTemplateAdapter extends ExcelTemplateAdapter { - constructor(url, $store, parserConfig, $api) { + constructor(url, $store, parserConfig, $api, quickImportType) { const name = url.split('/').pop() super(name, null, parserConfig) this.url = url this.$api = $api this.$store = $store + this.quickImportType = quickImportType } async init() { const data = await this.$api.utils.axiosRequestMake({ apiMeta: { url: this.url, - responseType: 'arraybuffer' + type: this.quickImportType === 'excel' ? 'excelUrl' : 'csvUrl' } }) this.excelData = data.data diff --git a/packages/nocodb/src/lib/meta/api/utilApis.ts b/packages/nocodb/src/lib/meta/api/utilApis.ts index 730a54f0d2e..7bce23f6400 100644 --- a/packages/nocodb/src/lib/meta/api/utilApis.ts +++ b/packages/nocodb/src/lib/meta/api/utilApis.ts @@ -60,8 +60,11 @@ export async function releaseVersion(_req: Request, res: Response) { res.json(result); } -export async function axiosRequestMake(req: Request, res: Response) { +async function _axiosRequestMake(req: Request, res: Response, type: string) { const { apiMeta } = req.body; + if (type === 'csvUrl' || type === 'excelUrl') { + apiMeta.responseType = 'arraybuffer'; + } if (apiMeta?.body) { try { apiMeta.body = JSON.parse(apiMeta.body); @@ -106,6 +109,16 @@ export async function axiosRequestMake(req: Request, res: Response) { return res.json(data?.data); } +export async function axiosRequestMake(req: Request, res: Response) { + const { + apiMeta: { type } + } = req.body; + if (type === 'csvUrl' || type === 'excelUrl') { + return await _axiosRequestMake(req, res, type); + } + return res.json({}); +} + export default router => { router.post( '/api/v1/db/meta/connection/test', From 52674bfed83fd59e713122b6ac4355721b1e356e Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 17 Jun 2022 15:46:55 +0800 Subject: [PATCH 015/134] fix: include ip block list & remove type --- .../nc-gui/components/import/QuickImport.vue | 8 ++++--- .../ExcelUrlTemplateAdapter.js | 3 +-- packages/nocodb/src/lib/meta/api/utilApis.ts | 23 ++++++++++++------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/packages/nc-gui/components/import/QuickImport.vue b/packages/nc-gui/components/import/QuickImport.vue index e402724eb27..49842bdf596 100644 --- a/packages/nc-gui/components/import/QuickImport.vue +++ b/packages/nc-gui/components/import/QuickImport.vue @@ -67,8 +67,9 @@ :rules=" [ v => !!v || $t('general.required'), - v => quickImportType === 'excel' ? - (/.*\.(xls|xlsx|xlsm|ods|ots)/.test(v) || errorMessages.importExcel) : + v => !(/(10)(\.([2]([0-5][0-5]|[01234][6-9])|[1][0-9][0-9]|[1-9][0-9]|[0-9])){3}|(172)\.(1[6-9]|2[0-9]|3[0-1])(\.(2[0-4][0-9]|25[0-5]|[1][0-9][0-9]|[1-9][0-9]|[0-9])){2}|(192)\.(168)(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){2}|(0.0.0.0)|localhost?/g).test(v) || errorMessages.ipBlockList, + v => quickImportType === 'excel' ? + (/.*\.(xls|xlsx|xlsm|ods|ots)/.test(v) || errorMessages.importExcel) : (/.*\.(csv)/.test(v) || errorMessages.importCSV), ]" /> @@ -222,7 +223,8 @@ export default { filename: '', errorMessages: { importExcel: "Target file is not an accepted file type. The accepted file types are .xls, .xlsx, .xlsm, .ods, .ots!", - importCSV: "Target file is not an accepted file type. The accepted file type is .csv!" + importCSV: "Target file is not an accepted file type. The accepted file type is .csv!", + ipBlockList: "IP Not allowed!" } } }, diff --git a/packages/nc-gui/components/import/templateParsers/ExcelUrlTemplateAdapter.js b/packages/nc-gui/components/import/templateParsers/ExcelUrlTemplateAdapter.js index 64b36f9220d..d8a91ac3d2d 100644 --- a/packages/nc-gui/components/import/templateParsers/ExcelUrlTemplateAdapter.js +++ b/packages/nc-gui/components/import/templateParsers/ExcelUrlTemplateAdapter.js @@ -13,8 +13,7 @@ export default class ExcelUrlTemplateAdapter extends ExcelTemplateAdapter { async init() { const data = await this.$api.utils.axiosRequestMake({ apiMeta: { - url: this.url, - type: this.quickImportType === 'excel' ? 'excelUrl' : 'csvUrl' + url: this.url } }) this.excelData = data.data diff --git a/packages/nocodb/src/lib/meta/api/utilApis.ts b/packages/nocodb/src/lib/meta/api/utilApis.ts index 7bce23f6400..89ebef8cb60 100644 --- a/packages/nocodb/src/lib/meta/api/utilApis.ts +++ b/packages/nocodb/src/lib/meta/api/utilApis.ts @@ -60,11 +60,9 @@ export async function releaseVersion(_req: Request, res: Response) { res.json(result); } -async function _axiosRequestMake(req: Request, res: Response, type: string) { +async function _axiosRequestMake(req: Request, res: Response) { const { apiMeta } = req.body; - if (type === 'csvUrl' || type === 'excelUrl') { - apiMeta.responseType = 'arraybuffer'; - } + if (apiMeta?.body) { try { apiMeta.body = JSON.parse(apiMeta.body); @@ -111,12 +109,21 @@ async function _axiosRequestMake(req: Request, res: Response, type: string) { export async function axiosRequestMake(req: Request, res: Response) { const { - apiMeta: { type } + apiMeta: { url } } = req.body; - if (type === 'csvUrl' || type === 'excelUrl') { - return await _axiosRequestMake(req, res, type); + const isExcelImport = /.*\.(xls|xlsx|xlsm|ods|ots)/; + const isCSVImport = /.*\.(csv)/; + const ipBlockList = /(10)(\.([2]([0-5][0-5]|[01234][6-9])|[1][0-9][0-9]|[1-9][0-9]|[0-9])){3}|(172)\.(1[6-9]|2[0-9]|3[0-1])(\.(2[0-4][0-9]|25[0-5]|[1][0-9][0-9]|[1-9][0-9]|[0-9])){2}|(192)\.(168)(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){2}|(0.0.0.0)|localhost?/g; + if ( + ipBlockList.test(url) || + (!isCSVImport.test(url) && !isExcelImport.test(url)) + ) { + return res.json({}); + } + if (isCSVImport || isExcelImport) { + req.body.apiMeta.responseType = 'arraybuffer'; } - return res.json({}); + return await _axiosRequestMake(req, res); } export default router => { From 5c88e38347562f78153ac94b5f3ed226d5409fc5 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 17 Jun 2022 16:20:32 +0800 Subject: [PATCH 016/134] fix: use 0.2.63 --- packages/nocodb/package-lock.json | 14 +++++++------- packages/nocodb/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/nocodb/package-lock.json b/packages/nocodb/package-lock.json index 78eedbbaa48..77e77715d00 100644 --- a/packages/nocodb/package-lock.json +++ b/packages/nocodb/package-lock.json @@ -70,7 +70,7 @@ "mysql2": "^2.2.5", "nanoid": "^3.1.20", "nc-common": "0.0.6", - "nc-help": "0.2.61", + "nc-help": "0.2.63", "nc-lib-gui": "0.91.10", "nc-plugin": "0.1.2", "ncp": "^2.0.0", @@ -16352,9 +16352,9 @@ } }, "node_modules/nc-help": { - "version": "0.2.61", - "resolved": "https://registry.npmjs.org/nc-help/-/nc-help-0.2.61.tgz", - "integrity": "sha512-YvFD0EjhwLs36U4GqIg0uxYWBurc39Wt7Hi7pd4/Lh1A/hmpWl6eZD4k9gk2FqqtGMlR/7e5UOmFYrRuvtzkTw==", + "version": "0.2.63", + "resolved": "https://registry.npmjs.org/nc-help/-/nc-help-0.2.63.tgz", + "integrity": "sha512-eB3XRRi4JyCIsCiniyvsSciKeDZovSkkxYxxAOY7JK65pbACfGETKhAhjHBm7BinWOOBVoqaAJFabZcBUHgvcg==", "dependencies": { "@rudderstack/rudder-sdk-node": "^1.1.3", "axios": "^0.21.1", @@ -38040,9 +38040,9 @@ "integrity": "sha512-3AryS9uwa5NfISLxMciUonrH7YfXp+nlahB9T7girXIsLQrmwX4MdnuKs32akduCOGpKmjTJSWmATULbuMkbfw==" }, "nc-help": { - "version": "0.2.61", - "resolved": "https://registry.npmjs.org/nc-help/-/nc-help-0.2.61.tgz", - "integrity": "sha512-YvFD0EjhwLs36U4GqIg0uxYWBurc39Wt7Hi7pd4/Lh1A/hmpWl6eZD4k9gk2FqqtGMlR/7e5UOmFYrRuvtzkTw==", + "version": "0.2.63", + "resolved": "https://registry.npmjs.org/nc-help/-/nc-help-0.2.63.tgz", + "integrity": "sha512-eB3XRRi4JyCIsCiniyvsSciKeDZovSkkxYxxAOY7JK65pbACfGETKhAhjHBm7BinWOOBVoqaAJFabZcBUHgvcg==", "requires": { "@rudderstack/rudder-sdk-node": "^1.1.3", "axios": "^0.21.1", diff --git a/packages/nocodb/package.json b/packages/nocodb/package.json index 05eb400cfbe..f0ad784972c 100644 --- a/packages/nocodb/package.json +++ b/packages/nocodb/package.json @@ -154,7 +154,7 @@ "mysql2": "^2.2.5", "nanoid": "^3.1.20", "nc-common": "0.0.6", - "nc-help": "0.2.61", + "nc-help": "0.2.63", "nc-lib-gui": "0.91.10", "nc-plugin": "0.1.2", "ncp": "^2.0.0", From 12323653b51fd85ee87d857b9ea1fe75acbfa5e8 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 17 Jun 2022 17:47:55 +0800 Subject: [PATCH 017/134] fix: add missing token_version --- .../nocodb/src/lib/meta/api/projectUserApis.ts | 4 +++- .../nocodb/src/lib/meta/api/userApi/helpers.ts | 5 +++++ .../src/lib/meta/api/userApi/initStrategies.ts | 16 +++++++++++++--- .../nocodb/src/lib/meta/api/userApi/userApis.ts | 6 +----- .../nocodb/src/lib/meta/helpers/stringHelpers.ts | 5 +++++ 5 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 packages/nocodb/src/lib/meta/helpers/stringHelpers.ts diff --git a/packages/nocodb/src/lib/meta/api/projectUserApis.ts b/packages/nocodb/src/lib/meta/api/projectUserApis.ts index f0f5c009655..95ced371380 100644 --- a/packages/nocodb/src/lib/meta/api/projectUserApis.ts +++ b/packages/nocodb/src/lib/meta/api/projectUserApis.ts @@ -15,6 +15,7 @@ import NcPluginMgrv2 from '../helpers/NcPluginMgrv2'; import Noco from '../../Noco'; import { PluginCategory } from 'nocodb-sdk'; import { metaApiMetrics } from '../helpers/apiMetrics'; +import { randomTokenString } from '../helpers/stringHelpers'; async function userList(req, res) { res.json({ @@ -101,7 +102,8 @@ async function userInvite(req, res, next): Promise { invite_token, invite_token_expires: new Date(Date.now() + 24 * 60 * 60 * 1000), email, - roles: 'user' + roles: 'user', + token_version: randomTokenString() }); // add user to project diff --git a/packages/nocodb/src/lib/meta/api/userApi/helpers.ts b/packages/nocodb/src/lib/meta/api/userApi/helpers.ts index 48f7c11f397..b750103685a 100644 --- a/packages/nocodb/src/lib/meta/api/userApi/helpers.ts +++ b/packages/nocodb/src/lib/meta/api/userApi/helpers.ts @@ -1,4 +1,5 @@ import * as jwt from 'jsonwebtoken'; +import crypto from 'crypto'; import User from '../../../models/User'; import { NcConfig } from '../../../../interface/config'; @@ -16,3 +17,7 @@ export function genJwt(user: User, config: NcConfig) { config.auth.jwt.options ); } + +export function randomTokenString(): string { + return crypto.randomBytes(40).toString('hex'); +} \ No newline at end of file diff --git a/packages/nocodb/src/lib/meta/api/userApi/initStrategies.ts b/packages/nocodb/src/lib/meta/api/userApi/initStrategies.ts index 5eceff31907..6cdd0048652 100644 --- a/packages/nocodb/src/lib/meta/api/userApi/initStrategies.ts +++ b/packages/nocodb/src/lib/meta/api/userApi/initStrategies.ts @@ -8,6 +8,7 @@ import passport from 'passport'; import { ExtractJwt } from 'passport-jwt'; import { Strategy as AuthTokenStrategy } from 'passport-auth-token'; import { Strategy as GoogleStrategy } from 'passport-google-oauth20'; +import { randomTokenString } from '../../helpers/stringHelpers'; const PassportLocalStrategy = require('passport-local').Strategy; @@ -102,7 +103,11 @@ export function initStrategies(router): void { ); if (cachedVal) { - if (cachedVal.token_version !== jwtPayload.token_version) { + if ( + cachedVal.token_version && + jwtPayload.token_version && + cachedVal.token_version !== jwtPayload.token_version + ) { return done(new Error('Token Expired. Please login again.')); } return done(null, cachedVal); @@ -110,7 +115,11 @@ export function initStrategies(router): void { User.getByEmail(jwtPayload?.email) .then(async user => { - if (user.token_version !== jwtPayload.token_version) { + if ( + user.token_version && + jwtPayload.token_version && + user.token_version !== jwtPayload.token_version + ) { return done(new Error('Token Expired. Please login again.')); } if (req.ncProjectId) { @@ -266,7 +275,8 @@ export function initStrategies(router): void { password: '', salt, roles, - email_verified: true + email_verified: true, + token_version: randomTokenString() }); return done(null, user); } diff --git a/packages/nocodb/src/lib/meta/api/userApi/userApis.ts b/packages/nocodb/src/lib/meta/api/userApi/userApis.ts index 18243d9455d..e07617ead22 100644 --- a/packages/nocodb/src/lib/meta/api/userApi/userApis.ts +++ b/packages/nocodb/src/lib/meta/api/userApi/userApis.ts @@ -11,7 +11,6 @@ import { Tele } from 'nc-help'; const { v4: uuidv4 } = require('uuid'); import Audit from '../../../models/Audit'; -import crypto from 'crypto'; import NcPluginMgrv2 from '../../helpers/NcPluginMgrv2'; import passport from 'passport'; @@ -20,6 +19,7 @@ import ncMetaAclMw from '../../helpers/ncMetaAclMw'; import { MetaTable } from '../../../utils/globals'; import Noco from '../../../Noco'; import { genJwt } from './helpers'; +import { randomTokenString } from '../../helpers/stringHelpers'; export async function signup(req: Request, res: Response) { const { @@ -243,10 +243,6 @@ async function googleSignin(req, res, next) { )(req, res, next); } -function randomTokenString(): string { - return crypto.randomBytes(40).toString('hex'); -} - function setTokenCookie(res, token): void { // create http only cookie with refresh token that expires in 7 days const cookieOptions = { diff --git a/packages/nocodb/src/lib/meta/helpers/stringHelpers.ts b/packages/nocodb/src/lib/meta/helpers/stringHelpers.ts new file mode 100644 index 00000000000..ac797229f5e --- /dev/null +++ b/packages/nocodb/src/lib/meta/helpers/stringHelpers.ts @@ -0,0 +1,5 @@ +import crypto from 'crypto'; + +export function randomTokenString(): string { + return crypto.randomBytes(40).toString('hex'); +} From 4cf303c75bfda4579cd6c53a49e67294fd723ac0 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 17 Jun 2022 18:55:02 +0800 Subject: [PATCH 018/134] fix: revise form validations --- .../project/spreadsheet/views/FormView.vue | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/packages/nc-gui/components/project/spreadsheet/views/FormView.vue b/packages/nc-gui/components/project/spreadsheet/views/FormView.vue index e3c8639b563..fe0beb255a2 100644 --- a/packages/nc-gui/components/project/spreadsheet/views/FormView.vue +++ b/packages/nc-gui/components/project/spreadsheet/views/FormView.vue @@ -617,35 +617,21 @@ export default { ) { continue } - if ( - !column.virtual && - (((column.rqd || column.notnull) && !column.cdf) || - (column.pk && !(column.ai || column.default)) || - this.localParams.fields[column.title].required) - ) { + if (!isVirtualCol(column) && (((column.rqd || column.notnull) && !column.cdf) || (column.pk && !(column.ai || column.cdf)) || column.required)) { obj.localState[column.title] = { required } - } else if (column.bt) { - const col = this.meta.columns.find( - c => c.column_name === column.bt.column_name - ) - if ( - (col.rqd && !col.default) || - this.localParams.fields[column.title].required - ) { - obj.localState[col.title] = { required } + } else if (column.uidt === UITypes.LinkToAnotherRecord && column.colOptions && column.colOptions.type === RelationTypes.BELONGS_TO) { + const col = this.meta.columns.find(c => c.id === column.colOptions.fk_child_column_id) + + if ((col && col.rqd && !col.cdf) || column.required) { + if (col) { obj.virtual[column.title] = { required } } } - } else if ( - column.virtual && - this.localParams.fields[column.title].required && - (column.mm || column.hm) - ) { + } else if (isVirtualCol(column) && column.required) { obj.virtual[column.title] = { minLength: minLength(1), required } } } - return obj }, computed: { From 9422b42968a23342265655c1f6a333518193f96e Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 17 Jun 2022 19:26:22 +0800 Subject: [PATCH 019/134] fix: handle project name length in frontend --- packages/nc-gui/components/CreateOrEditProject.vue | 7 +++++-- packages/nc-gui/pages/project/id.vue | 7 +++++-- packages/nc-gui/pages/project/xcdb.vue | 10 ++++++++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/nc-gui/components/CreateOrEditProject.vue b/packages/nc-gui/components/CreateOrEditProject.vue index 831b4fa4899..fe943c63544 100644 --- a/packages/nc-gui/components/CreateOrEditProject.vue +++ b/packages/nc-gui/components/CreateOrEditProject.vue @@ -89,7 +89,7 @@ ref="name" v-model="project.title" v-ge="['project', 'name']" - :rules="form.titleRequiredRule" + :rules="form.titleValidationRule" :height="20" :label="$t('placeholder.projName')" autofocus @@ -963,7 +963,10 @@ export default { /** ************** START : form related ****************/ form: { portValidationRule: [v => /^\d+$/.test(v) || 'Not a valid port'], - titleRequiredRule: [v => !!v || 'Title is required'], + titleValidationRule: [ + v => !!v || 'Title is required', + v => v.length <= 50 || 'Project name exceeds 50 characters', + ], requiredRule: [v => !!v || 'Field is required'], folderRequiredRule: [v => !!v || 'Folder path is required'] }, diff --git a/packages/nc-gui/pages/project/id.vue b/packages/nc-gui/pages/project/id.vue index 46069ba5bf8..1a70589d7bd 100644 --- a/packages/nc-gui/pages/project/id.vue +++ b/packages/nc-gui/pages/project/id.vue @@ -84,7 +84,7 @@ /^\d+$/.test(v) || 'Not a valid port'], - titleRequiredRule: [v => !!v || 'Title is required'], + titleValidationRule: [ + v => !!v || 'Title is required', + v => v.length <= 50 || 'Project name exceeds 50 characters', + ], requiredRule: [v => !!v || 'Field is required'], folderRequiredRule: [v => !!v || 'Folder path is required'] }, diff --git a/packages/nc-gui/pages/project/xcdb.vue b/packages/nc-gui/pages/project/xcdb.vue index 18534c3a86c..8c1c32aeb3c 100644 --- a/packages/nc-gui/pages/project/xcdb.vue +++ b/packages/nc-gui/pages/project/xcdb.vue @@ -39,7 +39,7 @@ :full-width="false" class="nc-metadb-project-name" :label="$t('placeholder.projName')" - :rules="[v => !!v || $t('general.required')]" + :rules="form.titleValidationRule" /> + JSON file + + + + + + @@ -404,9 +426,11 @@ import GlobalAcl from '~/components/GlobalAcl' import AuditTab from '~/components/project/AuditTab' import QuickImport from '~/components/import/QuickImport' import ImportFromAirtable from '~/components/import/ImportFromAirtable' +import JsonImport from '~/components/import/JSONImport' export default { components: { + JsonImport, ImportFromAirtable, SwaggerClient, // Screensaver, @@ -447,7 +471,8 @@ export default { showScreensaver: false, quickImportModal: false, quickImportType: '', - airtableImportModal: false + airtableImportModal: false, + jsonImportModal: false } }, methods: { diff --git a/packages/nc-gui/components/import/JSONImport.vue b/packages/nc-gui/components/import/JSONImport.vue new file mode 100644 index 00000000000..fc55b865b37 --- /dev/null +++ b/packages/nc-gui/components/import/JSONImport.vue @@ -0,0 +1,436 @@ + + + + + diff --git a/packages/nc-gui/components/import/templateParsers/CSVTemplateAdapter.js b/packages/nc-gui/components/import/templateParsers/CSVTemplateAdapter.js index 9a3be0d4de2..c608a79f850 100644 --- a/packages/nc-gui/components/import/templateParsers/CSVTemplateAdapter.js +++ b/packages/nc-gui/components/import/templateParsers/CSVTemplateAdapter.js @@ -1,6 +1,5 @@ import Papaparse from 'papaparse' import TemplateGenerator from '~/components/import/templateParsers/TemplateGenerator' - export default class CSVTemplateAdapter extends TemplateGenerator { constructor(name, data) { super() diff --git a/packages/nc-gui/components/import/templateParsers/JSONTemplateAdapter.js b/packages/nc-gui/components/import/templateParsers/JSONTemplateAdapter.js new file mode 100644 index 00000000000..14977ebdd7f --- /dev/null +++ b/packages/nc-gui/components/import/templateParsers/JSONTemplateAdapter.js @@ -0,0 +1,156 @@ +import { TemplateGenerator } from 'nocodb-sdk' +import { UITypes } from '~/components/project/spreadsheet/helpers/uiTypes' +import { getCheckboxValue, isCheckboxType } from '~/components/import/templateParsers/parserHelpers' + +const jsonTypeToUidt = { + number: UITypes.Number, + string: UITypes.SingleLineText, + date: UITypes.DateTime, + boolean: UITypes.Checkbox, + object: UITypes.LongText +} + +export default class JSONTemplateAdapter extends TemplateGenerator { + constructor(name = 'test', data, parserConfig = {}) { + super() + this.config = { + maxRowsToParse: 500, + ...parserConfig + } + this.name = name + this.jsonData = typeof data === 'string' ? JSON.parse(data) : data + this.project = { + title: this.name, + tables: [] + } + this.data = {} + } + + async init() { + } + + parseData() { + this.columns = this.csv.meta.fields + this.data = this.csv.data + } + + getColumns() { + return this.columns + } + + getData() { + return this.data + } + + parse() { + // for (let i = 0; i < this.wb.SheetNames.length; i++) { + // const columnNamePrefixRef = { id: 0 } + + const tn = 'table' + + const table = { table_name: tn, ref_table_name: tn, columns: [] } + + this.data[tn] = [] + + // const ws = this.wb.Sheets[sheet] + // const range = XLSX.utils.decode_range(ws['!ref']) + // const rows = XLSX.utils.sheet_to_json(ws, { header: 1, blankrows: false, cellDates: true, defval: null }) + + const objKeys = Object.keys(this.jsonData[0]) + + for (let col = 0; col < objKeys.length; col++) { + const key = objKeys[col] + const cn = objKeys[col].replace(/\W/g, '_').trim() + + const column = { + column_name: cn, + ref_column_name: cn + } + + table.columns.push(column) + + column.uidt = jsonTypeToUidt[typeof this.jsonData[0][key]] || UITypes.SingleLineText + + // todo: optimize + if (column.uidt === UITypes.SingleLineText) { + // check for long text + if (this.jsonData.some(r => + (r[key] || '').toString().match(/[\r\n]/) || + (r[key] || '').toString().length > 255) + ) { + column.uidt = UITypes.LongText + } else { + const vals = this.jsonData + .map(r => r[key]) + .filter(v => v !== null && v !== undefined && v.toString().trim() !== '') + + const checkboxType = isCheckboxType(vals) + if (checkboxType.length === 1) { + column.uidt = UITypes.Checkbox + } else { + // todo: optimize + // check column is multi or single select by comparing unique values + // todo: + // eslint-disable-next-line no-lonely-if + if (vals.some(v => v && v.toString().includes(','))) { + let flattenedVals = vals.flatMap(v => v ? v.toString().trim().split(/\s*,\s*/) : []) + const uniqueVals = flattenedVals = flattenedVals + .filter((v, i, arr) => i === arr.findIndex(v1 => v.toLowerCase() === v1.toLowerCase())) + if (flattenedVals.length > uniqueVals.length && uniqueVals.length <= Math.ceil(flattenedVals.length / 2)) { + column.uidt = UITypes.MultiSelect + column.dtxp = `'${uniqueVals.join("','")}'` + } + } else { + const uniqueVals = vals.map(v => v.toString().trim()).filter((v, i, arr) => i === arr.findIndex(v1 => v.toLowerCase() === v1.toLowerCase())) + if (vals.length > uniqueVals.length && uniqueVals.length <= Math.ceil(vals.length / 2)) { + column.uidt = UITypes.SingleSelect + column.dtxp = `'${uniqueVals.join("','")}'` + } + } + } + } + } else if (column.uidt === UITypes.Number) { + if (this.jsonData.slice(1, this.config.maxRowsToParse).some((v) => { + return v && v[key] && parseInt(+v[key]) !== +v[key] + })) { + column.uidt = UITypes.Decimal + } + if (this.jsonData.every((v, i) => { + return v[key] && v[key].toString().startsWith('$') + })) { + column.uidt = UITypes.Currency + } + } else if (column.uidt === UITypes.DateTime) { + if (this.jsonData.every((v, i) => { + return v[key] && v[key].toString().split(' ').length === 1 + })) { + column.uidt = UITypes.Date + } + } + } + + // let rowIndex = 0 + for (const row of this.jsonData) { + const rowData = {} + for (let i = 0; i < table.columns.length; i++) { + if (table.columns[i].uidt === UITypes.Checkbox) { + rowData[table.columns[i].column_name] = getCheckboxValue(row[i]) + } else if (table.columns[i].uidt === UITypes.Currency) { + rowData[table.columns[i].column_name] = (row[table.columns[i].ref_column_name].replace(/[^\d.]+/g, '')) || row[i] + } else if (table.columns[i].uidt === UITypes.SingleSelect || table.columns[i].uidt === UITypes.MultiSelect) { + rowData[table.columns[i].column_name] = (row[table.columns[i].ref_column_name] || '').toString().trim() || null + } else { + // toto: do parsing if necessary based on type + rowData[table.columns[i].column_name] = row[table.columns[i].ref_column_name] + } + } + this.data[tn].push(rowData) + // rowIndex++ + } + this.project.tables.push(table) + } + + getTemplate() { + return this.project + } +} diff --git a/packages/nocodb-sdk/src/index.ts b/packages/nocodb-sdk/src/index.ts index 805152d812a..561b841c361 100644 --- a/packages/nocodb-sdk/src/index.ts +++ b/packages/nocodb-sdk/src/index.ts @@ -5,6 +5,7 @@ export * from './lib/sqlUi'; export * from './lib/globals'; export * from './lib/helperFunctions'; export * from './lib/formulaHelpers'; -export * from './lib/passwordHelpers'; export { default as UITypes, isVirtualCol } from './lib/UITypes'; export { default as CustomAPI } from './lib/CustomAPI'; +export { default as TemplateGenerator } from './lib/TemplateGenerator'; +export * from './lib/passwordHelpers'; diff --git a/packages/nocodb-sdk/src/lib/TemplateGenerator.ts b/packages/nocodb-sdk/src/lib/TemplateGenerator.ts new file mode 100644 index 00000000000..ad74741b65f --- /dev/null +++ b/packages/nocodb-sdk/src/lib/TemplateGenerator.ts @@ -0,0 +1,30 @@ +import UITypes from './UITypes'; + +export interface Column { + column_name: string; + ref_column_name: string; + uidt?: UITypes; + dtxp?: any; + dt?: any; +} +export interface Table { + table_name: string; + ref_table_name: string; + columns: Array; +} +export interface Template { + title: string; + tables: Array; +} + +export default abstract class TemplateGenerator { + abstract parse(): Promise; + abstract parseTemplate(): Promise - Create template from Excel + Create template from JSON - +