## Configuration options for the base intermediate schema generator ## ## After modifying this file, regenerate the base intermediate schema ## by running the `generate_schema` script. # Default relative path for generated base schema file. # An absolute path can also be provided to the script as the first CLI argument. # If the CLI argument is present, it takes precedence over the value specified here. output_file_path: ../common/intermediate_db_schema/000_base_schema.sql ## Tables to include in the generated base intermediate schema. ## ## Available table options: ## virtual: Boolean. Enables the inclusion of a table in the schema solely based. ## on the provided configuration. A virtual table does not need to be available in the core schema. ## ignore: List of columns to ignore. Convenient if most of the table's column are needed. ## Usage is mutually exclusive with the `include` option. Only one should be used at a time. ## include: List of columns to include. Convenient if only a few columns are needed. ## Usage is mutually exclusive with the `include`` option. Only one should be used at a time. ## primary_key: Literal or list of columns to use as primary key. ## extend: List of objects describing columns to be added/extended. ## The following options are available for an "extend" object: ## name: Required. The name of the column being extended. ## is_null: Specifies if the column can be null. ## type: Column type. Defaults to TEXT. ## indexes: List of indexes to create. The following options are available for an "index" object: ## name: Index name. ## columns: List of column(s) to index. tables: schema_migrations: virtual: true primary_key: path extend: - name: path is_null: false - name: created_at type: datetime config: virtual: true primary_key: name extend: - name: name is_null: false - name: value is_null: false log_entries: virtual: true extend: - name: created_at type: datetime is_null: false - name: type is_null: false - name: message is_null: false - name: exception - name: details users: ignore: - seen_notification_id - last_posted_at - password_hash - salt - active - last_emailed_at - approved_by_id - previous_visit_at - suspended_at - suspended_till - views - flag_level - ip_address - title - uploaded_avatar_id - locale - primary_group_id - first_seen_at - silenced_till - group_locked_trust_level - manual_locked_trust_level - secure_identifier - flair_group_id - last_seen_reviewable_id - password_algorithm - username_lower extend: - name: email - name: created_at is_null: true - name: staged is_null: true - name: avatar_path - name: avatar_url - name: avatar_upload_id - name: bio - name: password is_null: true - name: trust_level is_null: true - name: suspension - name: location - name: website - name: old_relative_url - name: sso_record - name: anonymized type: boolean - name: original_username - name: timezone - name: email_level type: integer - name: email_messages_level type: integer - name: email_digests type: boolean categories: ignore: - topic_id - topic_count - user_id - topics_year - topics_month - topics_week - auto_close_hours - post_count - latest_post_id - latest_topic_id - posts_year - posts_month - posts_week - email_in - email_in_allow_strangers - topics_day - posts_day - allow_badges - name_lower - auto_close_based_on_last_post - topic_template - contains_messages - sort_order - sort_ascending - uploaded_logo_id - uploaded_background_id - topic_featured_link_allowed - all_topics_wiki - show_subcategory_list - num_featured_topics - default_view - subcategory_list_style - default_top_period - mailinglist_mirror - minimum_required_tags - navigate_to_first_post_after_read - search_priority - allow_global_tags - reviewable_by_group_id - read_only_banner - default_list_filter - allow_unlimited_owner_edits_on_first_post - default_slow_mode_seconds - uploaded_logo_dark_id - uploaded_background_dark_id extend: - name: about_topic_title - name: old_relative_url - name: existing_id type: integer - name: permissions type: json_text # JSON_TEXT ??? - name: logo_upload_id - name: tag_group_ids type: json_text # JSON_TEXT ??? topics: ignore: - last_posted_at - posts_count - last_post_user_id - reply_count - featured_user1_id - featured_user2_id - featured_user3_id - featured_user4_id - deleted_at - highest_post_number - like_count - incoming_link_count - moderator_posts_count - bumped_at - has_summary - archetype - notify_moderators_count - spam_count - score - percent_rank - slug - deleted_by_id - participant_count - word_count - excerpt - fancy_title - highest_staff_post_number - featured_link - reviewable_score - image_upload_id - slow_mode_seconds - bannered_until - external_id extend: - name: old_relative_url - name: private_message posts: ignore: - cooked - reply_to_post_number - reply_count - quote_count - deleted_at - off_topic_count - incoming_link_count - bookmark_count - score - reads - post_type - sort_order - last_editor_id - hidden - hidden_reason_id - notify_moderators_count - spam_count - illegal_count - inappropriate_count - last_version_at - user_deleted - reply_to_user_id - percent_rank - notify_user_count - like_score - deleted_by_id - edit_reason - word_count - version - cook_method - wiki - baked_at - baked_version - hidden_at - self_edits - reply_quoted - via_email - raw_email - public_version - action_code - locked_by_id - image_upload_id - outbound_message_id - qa_vote_count # TODO: added from plugin, maybe skip these automatically for core schema? extend: - name: reply_to_post_id # NOTE: should this be text?? - name: original_raw - name: upload_ids type: json_text - name: post_number type: integer - name: old_relative_url - name: accepted_answer type: boolean - name: small_action - name: whisper type: boolean - name: placeholders type: json_text indexes: - name: posts_by_topic_post_number columns: [topic_id, post_number] uploads: ignore: - original_filename - filesize - width - height - url - created_at - sha1 - origin - retain_hours - extension - thumbnail_width - thumbnail_height - etag - secure - access_control_post_id - original_sha1 - animated - verification_status - security_last_changed_at - security_last_changed_reason - dominant_color extend: - name: filename is_null: false - name: relative_path - name: type - name: data type: blob groups: include: - id - name - full_name - visibility_level - members_visibility_level - mentionable_level - messageable_level extend: - name: description group_members: virtual: true primary_key: [group_id, user_id] extend: - name: group_id type: integer - name: user_id type: integer - name: owner type: boolean likes: virtual: true primary_key: [user_id, post_id] extend: - name: post_id type: integer is_null: false - name: user_id type: integer is_null: false - name: created_at type: datetime is_null: false # TODO: Pending default values & auto incrementing id column user_fields: ignore: - created_at - external_name - external_type extend: - name: options type: json_text muted_users: primary_key: [user_id, muted_user_id] ignore: - id - created_at # NOTE: Perhaps use core's user_field_options instead? user_field_values: virtual: true extend: - name: user_id type: integer is_null: false - name: field_id type: integer is_null: false - name: is_multiselect_field type: boolean is_null: false - name: value indexes: - name: user_field_values_multiselect columns: [user_id, field_id, value] unique: true condition: WHERE is_multiselect_field = TRUE - name: user_field_values_not_multiselect columns: [user_id, field_id] unique: true condition: WHERE is_multiselect_field = FALSE tags: include: - id - name extend: - name: tag_group_id type: integer tag_groups: include: - id - name topic_tags: primary_key: [topic_id, tag_id] ignore: - id - created_at tag_users: primary_key: [tag_id, user_id] ignore: - id - created_at badges: ignore: - grant_count - allow_title - icon - listable - target_posts - enabled - auto_revoke - trigger - show_posts - system - image - badge_grouping_id extend: - name: bage_group user_badges: include: - user_id - badge_id - granted_at topic_users: primary_key: [user_id, topic_id] ignore: - id - posted - cleared_pinned_at - last_emailed_post_number - liked - bookmarked - last_posted_at permalink_normalizations: virtual: true primary_key: normalization extend: - name: normalization is_null: false site_settings: include: - name - value extend: - name: action category_custom_fields: primary_key: [category_id, name] ignore: - id - created_at post_custom_fields: primary_key: [post_id, name] ignore: - id - created_at polls: {} poll_options: ignore: - digest - html - anonymous_votes extend: - name: poll_id is_null: false - name: text is_null: false - name: position type: integer - name: created_at is_null: true poll_votes: primary_key: [poll_option_id, user_id] ignore: [poll_id] extend: - name: created_at is_null: true - name: poll_option_id is_null: false - name: user_id is_null: false ## Schema-wide column configuration options. These options apply to all tables. ## See table specific column configuration options above. ## ## Available Options: ## ignore: List of core/plugin table columns to ignore and exclude from intermediate schema. columns: ignore: - updated_at