organize database scripts
This commit is contained in:
parent
d56312a811
commit
9b1609e256
@ -8,7 +8,7 @@ ENV ACCEPT_EULA=Y \
|
|||||||
DROP_DATABASE=false \
|
DROP_DATABASE=false \
|
||||||
PATH="/opt/mssql-tools/bin:${PATH}"
|
PATH="/opt/mssql-tools/bin:${PATH}"
|
||||||
|
|
||||||
# Install sqlcmd utility
|
# Install sqlcmd utility and other required packages
|
||||||
USER root
|
USER root
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y wget software-properties-common gnupg2 && \
|
apt-get install -y wget software-properties-common gnupg2 && \
|
||||||
@ -21,16 +21,23 @@ RUN apt-get update && \
|
|||||||
|
|
||||||
# Create app directory and schemas subdirectory in one layer
|
# Create app directory and schemas subdirectory in one layer
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
RUN mkdir -p schemas
|
RUN mkdir -p schemas && \
|
||||||
|
mkdir -p sql_objects/{tables,constraints,foreign_keys,indexes/{clustered,nonclustered,unique_clustered},views,procedures} && \
|
||||||
|
chown -R mssql:mssql /usr/src/app && \
|
||||||
|
chmod -R 755 /usr/src/app
|
||||||
|
|
||||||
# Copy all SQL files in a single layer to reduce image size
|
# Copy all SQL files and scripts in a single layer to reduce image size
|
||||||
COPY ./sql-server/schemas/*.sql ./schemas/
|
COPY ./sql-server/schemas/*.sql ./schemas/
|
||||||
COPY ./sql-server/init.sql ./
|
COPY ./sql-server/init.sql ./
|
||||||
COPY ./sql-server/setup.sh ./
|
COPY ./sql-server/setup.sh ./
|
||||||
|
COPY ./sql-server/extract_*.sh ./
|
||||||
|
|
||||||
# Fix line endings and make setup script executable
|
# Fix line endings and make all scripts executable
|
||||||
RUN sed -i 's/\r$//' setup.sh && \
|
RUN sed -i 's/\r$//' setup.sh && \
|
||||||
chmod +x setup.sh
|
sed -i 's/\r$//' extract_*.sh && \
|
||||||
|
chmod +x setup.sh && \
|
||||||
|
chmod +x extract_*.sh && \
|
||||||
|
chown -R mssql:mssql /usr/src/app
|
||||||
|
|
||||||
# Switch back to mssql user
|
# Switch back to mssql user
|
||||||
USER mssql
|
USER mssql
|
||||||
|
|||||||
@ -12,6 +12,9 @@ BASE_DIR="sql_objects"
|
|||||||
# Create directory structure
|
# Create directory structure
|
||||||
mkdir -p "$BASE_DIR"/{constraints,foreign_keys}
|
mkdir -p "$BASE_DIR"/{constraints,foreign_keys}
|
||||||
|
|
||||||
|
# Ensure proper permissions
|
||||||
|
chmod -R 755 "$BASE_DIR"
|
||||||
|
|
||||||
# Function to clean filename
|
# Function to clean filename
|
||||||
clean_filename() {
|
clean_filename() {
|
||||||
# Remove brackets, convert dots and spaces to underscores, remove parentheses
|
# Remove brackets, convert dots and spaces to underscores, remove parentheses
|
||||||
@ -14,6 +14,9 @@ mkdir -p "$BASE_DIR/indexes/clustered"
|
|||||||
mkdir -p "$BASE_DIR/indexes/nonclustered"
|
mkdir -p "$BASE_DIR/indexes/nonclustered"
|
||||||
mkdir -p "$BASE_DIR/indexes/unique_clustered"
|
mkdir -p "$BASE_DIR/indexes/unique_clustered"
|
||||||
|
|
||||||
|
# Ensure proper permissions
|
||||||
|
chmod -R 755 "$BASE_DIR"
|
||||||
|
|
||||||
# Function to clean filename
|
# Function to clean filename
|
||||||
clean_filename() {
|
clean_filename() {
|
||||||
# Remove brackets, convert dots and spaces to underscores, remove parentheses
|
# Remove brackets, convert dots and spaces to underscores, remove parentheses
|
||||||
@ -12,6 +12,9 @@ BASE_DIR="sql_objects"
|
|||||||
# Create directory structure
|
# Create directory structure
|
||||||
mkdir -p "$BASE_DIR/procedures"
|
mkdir -p "$BASE_DIR/procedures"
|
||||||
|
|
||||||
|
# Ensure proper permissions
|
||||||
|
chmod -R 755 "$BASE_DIR"
|
||||||
|
|
||||||
# Function to clean filename
|
# Function to clean filename
|
||||||
clean_filename() {
|
clean_filename() {
|
||||||
# Remove brackets, convert dots and spaces to underscores, remove parentheses
|
# Remove brackets, convert dots and spaces to underscores, remove parentheses
|
||||||
150
ef-migration/infrastructure/sql-server/extract_tables.sh
Executable file
150
ef-migration/infrastructure/sql-server/extract_tables.sh
Executable file
@ -0,0 +1,150 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check if input file is provided
|
||||||
|
if [ $# -ne 1 ]; then
|
||||||
|
echo "Usage: $0 <sql_file>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
SQL_FILE="$1"
|
||||||
|
BASE_DIR="/usr/src/app/sql_objects" # Use absolute path
|
||||||
|
|
||||||
|
# Create directory structure with proper permissions
|
||||||
|
echo "Creating directory structure at $BASE_DIR/tables"
|
||||||
|
mkdir -p "$BASE_DIR/tables"
|
||||||
|
chmod -R 777 "$BASE_DIR" # Give full permissions for testing
|
||||||
|
|
||||||
|
# Function to check if table is temporary
|
||||||
|
is_temporary_table() {
|
||||||
|
local table_name="$1"
|
||||||
|
if echo "$table_name" | grep -iE "^(#|tmp_|temp_|temporary_|import_|viewimport_)" >/dev/null; then
|
||||||
|
return 0 # true in bash
|
||||||
|
else
|
||||||
|
return 1 # false in bash
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to clean filename
|
||||||
|
clean_filename() {
|
||||||
|
# Remove brackets, convert dots and spaces to underscores, remove parentheses
|
||||||
|
echo "$1" | sed 's/\[\|\]//g' | tr '.' '_' | tr ' ' '_' | sed 's/[()]//g' | sed 's/__*/_/g' | sed 's/_$//'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to extract table name with better schema handling
|
||||||
|
extract_table_name() {
|
||||||
|
local create_statement="$1"
|
||||||
|
# First, try to match schema.table pattern with brackets
|
||||||
|
local table_name=$(echo "$create_statement" | sed -nE 's/.*CREATE[[:space:]]+TABLE[[:space:]]+\[([^]]+)\]\.\[([^]]+)\].*/\1.\2/p')
|
||||||
|
|
||||||
|
if [ -z "$table_name" ]; then
|
||||||
|
# Try to match schema.table pattern without brackets
|
||||||
|
table_name=$(echo "$create_statement" | sed -nE 's/.*CREATE[[:space:]]+TABLE[[:space:]]+([^.[:space:]]+)\.([^.[:space:]]+).*/\1.\2/p')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$table_name" ]; then
|
||||||
|
# Try to match just table name with brackets
|
||||||
|
table_name=$(echo "$create_statement" | sed -nE 's/.*CREATE[[:space:]]+TABLE[[:space:]]+\[([^]]+)\].*/\1/p')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$table_name" ]; then
|
||||||
|
# Try to match just table name without brackets
|
||||||
|
table_name=$(echo "$create_statement" | sed -nE 's/.*CREATE[[:space:]]+TABLE[[:space:]]+([^[:space:]]+).*/\1/p')
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$table_name"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to process each CREATE TABLE statement
|
||||||
|
process_table() {
|
||||||
|
local table_statement="$1"
|
||||||
|
local table_name=$(extract_table_name "$table_statement")
|
||||||
|
|
||||||
|
# Debug output
|
||||||
|
echo "Extracted table name: $table_name"
|
||||||
|
|
||||||
|
# Skip if we couldn't extract table name
|
||||||
|
if [ -z "$table_name" ]; then
|
||||||
|
echo "Warning: Could not extract table name from statement:"
|
||||||
|
echo "$table_statement" | head -n 1
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if it's a temporary table
|
||||||
|
if is_temporary_table "$table_name"; then
|
||||||
|
echo "Skipping temporary table: $table_name"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clean filename and create full path
|
||||||
|
clean_name=$(clean_filename "${table_name}")
|
||||||
|
output_file="$BASE_DIR/tables/${clean_name}.sql"
|
||||||
|
|
||||||
|
echo "Attempting to write to: $output_file"
|
||||||
|
# Create the file with proper error handling
|
||||||
|
if ! echo "$table_statement" > "$output_file" 2>/dev/null; then
|
||||||
|
echo "Error writing to $output_file"
|
||||||
|
echo "Current permissions:"
|
||||||
|
ls -la "$BASE_DIR/tables"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Successfully created: $output_file"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main processing function
|
||||||
|
extract_tables() {
|
||||||
|
local current_statement=""
|
||||||
|
local capture_table=false
|
||||||
|
|
||||||
|
# Read the file line by line
|
||||||
|
while IFS= read -r line || [ -n "$line" ]; do
|
||||||
|
# Skip empty lines and pure comment lines
|
||||||
|
if [ -z "${line// }" ] || [[ "$line" =~ ^[[:space:]]*-- ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check for CREATE TABLE statement
|
||||||
|
if echo "$line" | grep -i "CREATE[[:space:]]\+TABLE" > /dev/null; then
|
||||||
|
# Debug output
|
||||||
|
echo "Found CREATE TABLE statement: $line"
|
||||||
|
local table_name=$(extract_table_name "$line")
|
||||||
|
echo "Extracted table name from line: $table_name"
|
||||||
|
|
||||||
|
if ! is_temporary_table "$table_name"; then
|
||||||
|
capture_table=true
|
||||||
|
current_statement="$line"
|
||||||
|
else
|
||||||
|
echo "Skipping temporary table: $table_name"
|
||||||
|
fi
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If we're capturing a table
|
||||||
|
if $capture_table; then
|
||||||
|
current_statement+=$'\n'"$line"
|
||||||
|
|
||||||
|
# If we find a GO statement, process the table
|
||||||
|
if echo "$line" | grep -i "^[[:space:]]*GO[[:space:]]*$" > /dev/null; then
|
||||||
|
process_table "$current_statement"
|
||||||
|
capture_table=false
|
||||||
|
current_statement=""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done < "$SQL_FILE"
|
||||||
|
|
||||||
|
# Process any remaining table statement
|
||||||
|
if $capture_table && [ -n "$current_statement" ]; then
|
||||||
|
process_table "$current_statement"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove comment lines and process
|
||||||
|
echo "Starting table extraction from $SQL_FILE to $BASE_DIR/tables"
|
||||||
|
echo "Current working directory: $(pwd)"
|
||||||
|
echo "Directory contents before extraction:"
|
||||||
|
ls -la "$BASE_DIR/tables"
|
||||||
|
|
||||||
|
sed 's/--.*$//' "$SQL_FILE" | extract_tables
|
||||||
|
|
||||||
|
echo "Extraction completed. Directory contents after extraction:"
|
||||||
|
ls -la "$BASE_DIR/tables"
|
||||||
@ -12,6 +12,9 @@ BASE_DIR="sql_objects"
|
|||||||
# Create directory structure
|
# Create directory structure
|
||||||
mkdir -p "$BASE_DIR/views"
|
mkdir -p "$BASE_DIR/views"
|
||||||
|
|
||||||
|
# Ensure proper permissions
|
||||||
|
chmod -R 755 "$BASE_DIR"
|
||||||
|
|
||||||
# Function to clean filename
|
# Function to clean filename
|
||||||
clean_filename() {
|
clean_filename() {
|
||||||
# Remove brackets, convert dots and spaces to underscores, remove parentheses
|
# Remove brackets, convert dots and spaces to underscores, remove parentheses
|
||||||
@ -1,105 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Check if input file is provided
|
|
||||||
if [ $# -ne 1 ]; then
|
|
||||||
echo "Usage: $0 <sql_file>"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
SQL_FILE="$1"
|
|
||||||
BASE_DIR="sql_objects"
|
|
||||||
|
|
||||||
# Create directory structure
|
|
||||||
mkdir -p "$BASE_DIR/tables"
|
|
||||||
|
|
||||||
# Function to clean filename
|
|
||||||
clean_filename() {
|
|
||||||
# Remove brackets, convert dots and spaces to underscores, remove parentheses
|
|
||||||
echo "$1" | sed 's/\[\|\]//g' | tr '.' '_' | tr ' ' '_' | sed 's/[()]//g' | sed 's/__*/_/g' | sed 's/_$//'
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to check if table is temporary
|
|
||||||
is_temporary_table() {
|
|
||||||
local table_name="$1"
|
|
||||||
if echo "$table_name" | grep -iE "temp|tmp|temporary|import_|viewimport_" >/dev/null; then
|
|
||||||
return 0 # true in bash
|
|
||||||
else
|
|
||||||
return 1 # false in bash
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to extract CREATE TABLE statements only
|
|
||||||
extract_tables() {
|
|
||||||
local current_object=""
|
|
||||||
local capture_table=false
|
|
||||||
local table_name=""
|
|
||||||
|
|
||||||
# Read the file line by line
|
|
||||||
while IFS= read -r line || [ -n "$line" ]; do
|
|
||||||
# Check if we've found a CREATE TABLE statement
|
|
||||||
if echo "$line" | grep -i "CREATE[[:space:]]\+TABLE" >/dev/null; then
|
|
||||||
# Extract table name and check if it's temporary
|
|
||||||
table_name=$(echo "$line" | sed -E 's/.*CREATE[[:space:]]+TABLE[[:space:]]+\[?([^\]]+)\]?.*/\1/')
|
|
||||||
|
|
||||||
if is_temporary_table "$table_name"; then
|
|
||||||
echo "Skipping temporary table: $table_name"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
capture_table=true
|
|
||||||
current_object="$line"$'\n'
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If we're capturing a table and find a following CREATE or ALTER statement, stop capturing
|
|
||||||
if $capture_table; then
|
|
||||||
if echo "$line" | grep -i "^[[:space:]]*CREATE\|^[[:space:]]*ALTER" >/dev/null; then
|
|
||||||
# Save the current table before starting a new object
|
|
||||||
if [ -n "$table_name" ]; then
|
|
||||||
clean_name=$(clean_filename "$table_name")
|
|
||||||
output_file="$BASE_DIR/tables/${clean_name}.sql"
|
|
||||||
echo "$current_object" > "$output_file"
|
|
||||||
echo "Created: $output_file"
|
|
||||||
fi
|
|
||||||
capture_table=false
|
|
||||||
current_object=""
|
|
||||||
table_name=""
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Add line to current object if we're still capturing
|
|
||||||
current_object+="$line"$'\n'
|
|
||||||
|
|
||||||
# If we find a GO statement, save the table
|
|
||||||
if echo "$line" | grep -i "^[[:space:]]*GO[[:space:]]*$" >/dev/null; then
|
|
||||||
if [ -n "$table_name" ]; then
|
|
||||||
clean_name=$(clean_filename "$table_name")
|
|
||||||
output_file="$BASE_DIR/tables/${clean_name}.sql"
|
|
||||||
echo "$current_object" > "$output_file"
|
|
||||||
echo "Created: $output_file"
|
|
||||||
fi
|
|
||||||
capture_table=false
|
|
||||||
current_object=""
|
|
||||||
table_name=""
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done < "$SQL_FILE"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Remove comment lines starting with --
|
|
||||||
echo "Extracting CREATE TABLE statements..."
|
|
||||||
sed 's/--.*$//' "$SQL_FILE" | extract_tables
|
|
||||||
|
|
||||||
echo "CREATE TABLE statements have been saved in $BASE_DIR/tables/"
|
|
||||||
|
|
||||||
# Count files
|
|
||||||
count=$(ls -1 "$BASE_DIR/tables"/*.sql 2>/dev/null | wc -l)
|
|
||||||
echo -e "\nTotal tables extracted: $count"
|
|
||||||
|
|
||||||
# List extracted tables
|
|
||||||
echo -e "\nExtracted tables:"
|
|
||||||
for table in "$BASE_DIR/tables"/*.sql; do
|
|
||||||
if [ -f "$table" ]; then
|
|
||||||
echo "- $(basename "$table")"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
@ -1,116 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Check if input file is provided
|
|
||||||
if [ $# -ne 1 ]; then
|
|
||||||
echo "Usage: $0 <sql_file>"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
SQL_FILE="$1"
|
|
||||||
BASE_DIR="sql_objects"
|
|
||||||
|
|
||||||
# Create directory structure
|
|
||||||
mkdir -p "$BASE_DIR"/{tables,views,procedures,constraints,indexes,alter_tables}
|
|
||||||
|
|
||||||
# Function to clean filename
|
|
||||||
clean_filename() {
|
|
||||||
echo "$1" | sed 's/\[\|\]//g' | tr '.' '_'
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to extract SQL objects and save to files
|
|
||||||
extract_objects() {
|
|
||||||
local current_object=""
|
|
||||||
local object_type=""
|
|
||||||
local object_name=""
|
|
||||||
local table_name=""
|
|
||||||
|
|
||||||
# Read the file line by line
|
|
||||||
while IFS= read -r line || [ -n "$line" ]; do
|
|
||||||
# Skip empty lines at the start
|
|
||||||
if [ -z "$current_object" ] && [ -z "${line// }" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Add line to current object
|
|
||||||
current_object+="$line"$'\n'
|
|
||||||
|
|
||||||
# Check if we've reached the end of an object (GO statement)
|
|
||||||
if echo "$line" | grep -i "^[[:space:]]*GO[[:space:]]*$" >/dev/null; then
|
|
||||||
# Determine object type and name
|
|
||||||
if echo "$current_object" | grep -i "CREATE[[:space:]]\+TABLE" >/dev/null; then
|
|
||||||
object_type="tables"
|
|
||||||
object_name=$(echo "$current_object" | grep -i "CREATE[[:space:]]\+TABLE" | sed -E 's/.*CREATE[[:space:]]+TABLE[[:space:]]+\[?([^\]]+)\]?.*/\1/')
|
|
||||||
elif echo "$current_object" | grep -i "CREATE[[:space:]]\+VIEW" >/dev/null; then
|
|
||||||
object_type="views"
|
|
||||||
object_name=$(echo "$current_object" | grep -i "CREATE[[:space:]]\+VIEW" | sed -E 's/.*CREATE[[:space:]]+VIEW[[:space:]]+\[?([^\]]+)\]?.*/\1/')
|
|
||||||
elif echo "$current_object" | grep -i "CREATE[[:space:]]\+PROC" >/dev/null; then
|
|
||||||
object_type="procedures"
|
|
||||||
object_name=$(echo "$current_object" | grep -i "CREATE[[:space:]]\+PROC[[:space:]EDURE]*" | sed -E 's/.*CREATE[[:space:]]+PROC[[:space:]EDURE]*[[:space:]]+\[?([^\]]+)\]?.*/\1/')
|
|
||||||
elif echo "$current_object" | grep -i "ALTER[[:space:]]\+TABLE" >/dev/null; then
|
|
||||||
# Extract table name and constraint name if it exists
|
|
||||||
table_name=$(echo "$current_object" | grep -i "ALTER[[:space:]]\+TABLE" | sed -E 's/.*ALTER[[:space:]]+TABLE[[:space:]]+\[?([^\]]+)\]?.*/\1/')
|
|
||||||
|
|
||||||
if echo "$current_object" | grep -i "ADD[[:space:]]\+CONSTRAINT" >/dev/null; then
|
|
||||||
object_type="constraints"
|
|
||||||
object_name=$(echo "$current_object" | grep -i "CONSTRAINT" | sed -E 's/.*CONSTRAINT[[:space:]]+\[?([^\]]+)\]?.*/\1/')
|
|
||||||
else
|
|
||||||
object_type="alter_tables"
|
|
||||||
object_name="${table_name}_alter_$(date +%s%N | cut -b1-5)"
|
|
||||||
fi
|
|
||||||
elif echo "$current_object" | grep -i "CREATE.*INDEX" >/dev/null; then
|
|
||||||
object_type="indexes"
|
|
||||||
object_name=$(echo "$current_object" | grep -i "INDEX" | sed -E 's/.*INDEX[[:space:]]+\[?([^\]]+)\]?.*/\1/')
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If we identified an object type and name, save it
|
|
||||||
if [ -n "$object_type" ] && [ -n "$object_name" ]; then
|
|
||||||
# Clean the filename
|
|
||||||
clean_name=$(clean_filename "$object_name")
|
|
||||||
output_file="$BASE_DIR/$object_type/$clean_name.sql"
|
|
||||||
|
|
||||||
# For alter_tables, make sure we don't overwrite existing files
|
|
||||||
if [ "$object_type" = "alter_tables" ]; then
|
|
||||||
counter=1
|
|
||||||
base_file="$BASE_DIR/$object_type/$clean_name"
|
|
||||||
while [ -f "${base_file}.sql" ]; do
|
|
||||||
clean_name="${clean_name}_${counter}"
|
|
||||||
counter=$((counter + 1))
|
|
||||||
done
|
|
||||||
output_file="$base_file.sql"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Save the object to file
|
|
||||||
echo "$current_object" > "$output_file"
|
|
||||||
echo "Created: $output_file"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Reset for next object
|
|
||||||
current_object=""
|
|
||||||
object_type=""
|
|
||||||
object_name=""
|
|
||||||
table_name=""
|
|
||||||
fi
|
|
||||||
done < "$SQL_FILE"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Remove comment lines starting with --
|
|
||||||
echo "Removing comments and processing SQL file..."
|
|
||||||
sed 's/--.*$//' "$SQL_FILE" | extract_objects
|
|
||||||
|
|
||||||
echo "SQL objects have been organized in the $BASE_DIR directory."
|
|
||||||
echo "
|
|
||||||
Directory structure:
|
|
||||||
$BASE_DIR/
|
|
||||||
├── tables/
|
|
||||||
├── views/
|
|
||||||
├── procedures/
|
|
||||||
├── constraints/
|
|
||||||
├── indexes/
|
|
||||||
└── alter_tables/"
|
|
||||||
|
|
||||||
# Count files in each directory
|
|
||||||
echo -e "\nFile counts:"
|
|
||||||
for dir in tables views procedures constraints indexes alter_tables; do
|
|
||||||
count=$(ls -1 "$BASE_DIR/$dir"/*.sql 2>/dev/null | wc -l)
|
|
||||||
echo "$dir: $count files"
|
|
||||||
done
|
|
||||||
@ -76,31 +76,75 @@ else
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Run all schema scripts in the schemas directory
|
# Clean up existing files in sql_objects directories
|
||||||
echo "Running schema scripts..."
|
echo "Cleaning up existing files..."
|
||||||
for f in /usr/src/app/schemas/*.sql
|
rm -f /usr/src/app/sql_objects/*/*.sql
|
||||||
|
rm -f /usr/src/app/sql_objects/indexes/*/*.sql
|
||||||
|
|
||||||
|
# Process each schema file through the extraction scripts
|
||||||
|
echo "Processing schema files..."
|
||||||
|
for schema_file in /usr/src/app/schemas/*.sql
|
||||||
do
|
do
|
||||||
echo "Processing $f..."
|
echo "Processing schema file: $schema_file"
|
||||||
|
|
||||||
# Create a temporary file
|
# Extract different types of SQL objects
|
||||||
temp_file=$(mktemp)
|
bash /usr/src/app/extract_tables.sh "$schema_file"
|
||||||
|
|
||||||
# Process the file: add newlines around GO statements
|
|
||||||
sed 's/GO/\nGO\n/g' "$f" > "$temp_file"
|
|
||||||
|
|
||||||
# Execute the processed file
|
|
||||||
sqlcmd -S localhost -U sa -P $SA_PASSWORD -d st-database -i "$temp_file"
|
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "Warning: Script $f had some errors but continuing..."
|
echo "Warning: Table extraction had some errors but continuing..."
|
||||||
rm "$temp_file" # Clean up temp file
|
|
||||||
continue
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clean up temp file
|
bash /usr/src/app/extract_constraints.sh "$schema_file"
|
||||||
rm "$temp_file"
|
bash /usr/src/app/extract_indexes.sh "$schema_file"
|
||||||
|
bash /usr/src/app/extract_views.sh "$schema_file"
|
||||||
|
bash /usr/src/app/extract_procedures.sh "$schema_file"
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "All scripts executed. SQL Server is ready."
|
# Function to execute SQL files from a directory
|
||||||
|
execute_sql_files() {
|
||||||
|
local dir=$1
|
||||||
|
local type=$2
|
||||||
|
|
||||||
|
if [ -d "$dir" ] && [ "$(ls -A $dir 2>/dev/null)" ]; then
|
||||||
|
echo "Executing $type..."
|
||||||
|
for sql_file in "$dir"/*.sql; do
|
||||||
|
if [ -f "$sql_file" ]; then
|
||||||
|
echo "Executing $sql_file..."
|
||||||
|
sqlcmd -S localhost -U sa -P $SA_PASSWORD -d st-database -i "$sql_file"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Warning: Error executing $sql_file but continuing..."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "No files found in $dir"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Execute SQL objects in the correct order
|
||||||
|
echo "Executing SQL objects in order..."
|
||||||
|
|
||||||
|
# 1. Tables
|
||||||
|
execute_sql_files "sql_objects/tables" "tables"
|
||||||
|
|
||||||
|
# 2. Constraints
|
||||||
|
execute_sql_files "sql_objects/constraints" "constraints"
|
||||||
|
execute_sql_files "sql_objects/foreign_keys" "foreign keys"
|
||||||
|
|
||||||
|
# 3. Indexes
|
||||||
|
execute_sql_files "sql_objects/indexes/clustered" "clustered indexes"
|
||||||
|
execute_sql_files "sql_objects/indexes/unique_clustered" "unique clustered indexes"
|
||||||
|
execute_sql_files "sql_objects/indexes/nonclustered" "nonclustered indexes"
|
||||||
|
|
||||||
|
# 4. Views
|
||||||
|
execute_sql_files "sql_objects/views" "views"
|
||||||
|
|
||||||
|
# 5. Stored Procedures
|
||||||
|
execute_sql_files "sql_objects/procedures" "stored procedures"
|
||||||
|
|
||||||
|
# Clean up
|
||||||
|
echo "Cleaning up..."
|
||||||
|
rm -rf sql_objects
|
||||||
|
echo "SQL object execution completed"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Keep container running
|
# Keep container running
|
||||||
|
|||||||
@ -1,42 +0,0 @@
|
|||||||
-- SCHEMA: dbo
|
|
||||||
|
|
||||||
---------------------------------------------
|
|
||||||
-- TABLES
|
|
||||||
---------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------------
|
|
||||||
-- dbo.AMAssumptionView ------------------
|
|
||||||
---------------------------------------------
|
|
||||||
DROP TABLE [dbo].[AMAssumptionView];
|
|
||||||
GO
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[AMAssumptionView] (
|
|
||||||
[AssumptionViewGUID] uniqueidentifier NOT NULL,
|
|
||||||
[AssumptionGroupGUID] uniqueidentifier NOT NULL,
|
|
||||||
[Name] nvarchar(450) NOT NULL,
|
|
||||||
[ColumnWidths] varchar(8000) NOT NULL,
|
|
||||||
[AssumptionJoinDataGUID] uniqueidentifier NOT NULL,
|
|
||||||
[FolderGUID] uniqueidentifier NOT NULL,
|
|
||||||
[IsDistributionModeActive] bit NOT NULL,
|
|
||||||
[DistributionInfo] xml NOT NULL,
|
|
||||||
[ProviderGUID] uniqueidentifier NOT NULL,
|
|
||||||
[CreatedDate] datetime NOT NULL,
|
|
||||||
[CreatedBy] uniqueidentifier NOT NULL,
|
|
||||||
[LastUsedDate] datetime NOT NULL,
|
|
||||||
PRIMARY KEY ([AssumptionViewGUID])
|
|
||||||
);
|
|
||||||
GO
|
|
||||||
ALTER TABLE [dbo].[AMAssumptionView] ADD CONSTRAINT [DF_AMAssumptionView_CreatedBy] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [CreatedBy]; GO
|
|
||||||
ALTER TABLE [dbo].[AMAssumptionView] ADD CONSTRAINT [DF_AMAssumptionView_CreatedDate] DEFAULT (getdate()) FOR [CreatedDate]; GO
|
|
||||||
ALTER TABLE [dbo].[AMAssumptionView] ADD CONSTRAINT [DF_AMAssumptionView_LastUsedDate] DEFAULT (getdate()) FOR [LastUsedDate]; GO
|
|
||||||
ALTER TABLE [dbo].[AMAssumptionView] ADD CONSTRAINT [DF_Table_1_AssumptionViewGUID] DEFAULT (newid()) FOR [AssumptionViewGUID]; GO
|
|
||||||
ALTER TABLE [dbo].[AMAssumptionView] ADD CONSTRAINT [DF_AMAssumptionView_ASSUMPTIONGROUPGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [AssumptionGroupGUID]; GO
|
|
||||||
ALTER TABLE [dbo].[AMAssumptionView] ADD CONSTRAINT [DF_AMAssumptionView_NAME] DEFAULT ('') FOR [Name]; GO
|
|
||||||
ALTER TABLE [dbo].[AMAssumptionView] ADD CONSTRAINT [DF_AMAssumptionView_COLUMNWIDTHS] DEFAULT ('') FOR [ColumnWidths]; GO
|
|
||||||
ALTER TABLE [dbo].[AMAssumptionView] ADD CONSTRAINT [DF_AMAssumptionView_ASSUMPTIONCUBEGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [AssumptionJoinDataGUID]; GO
|
|
||||||
ALTER TABLE [dbo].[AMAssumptionView] ADD CONSTRAINT [DF_AMAssumptionView_FOLDERGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [FolderGUID]; GO
|
|
||||||
ALTER TABLE [dbo].[AMAssumptionView] ADD CONSTRAINT [DF_AMAssumptionView_ISDISTRIBUTIONMODEACTIVE] DEFAULT ((0)) FOR [IsDistributionModeActive]; GO
|
|
||||||
ALTER TABLE [dbo].[AMAssumptionView] ADD CONSTRAINT [DF_AMAssumptionView_DISTRIBUTIONINFOXML] DEFAULT ('') FOR [DistributionInfo]; GO
|
|
||||||
ALTER TABLE [dbo].[AMAssumptionView] ADD CONSTRAINT [DF_AMAssumptionView_PROVIDERGUID] DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [ProviderGUID]; GO
|
|
||||||
|
|
||||||
@ -1,43 +0,0 @@
|
|||||||
-- SCHEMA: fp
|
|
||||||
|
|
||||||
---------------------------------------------
|
|
||||||
-- TABLES
|
|
||||||
---------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------------
|
|
||||||
-- fp.APAdminPerformanceTest ------------------
|
|
||||||
---------------------------------------------
|
|
||||||
DROP TABLE [fp].[APAdminPerformanceTest];
|
|
||||||
GO
|
|
||||||
|
|
||||||
CREATE TABLE [fp].[APAdminPerformanceTest] (
|
|
||||||
[TestID] uniqueidentifier NOT NULL,
|
|
||||||
[SortOrder] int NOT NULL,
|
|
||||||
[TestTypeID] tinyint NOT NULL,
|
|
||||||
[TestName] nvarchar(100) NOT NULL,
|
|
||||||
[Description] nvarchar(3000) NOT NULL,
|
|
||||||
[BudgetConfigID] int NOT NULL,
|
|
||||||
[SourceDimensionalityJSON] nvarchar(max) NOT NULL,
|
|
||||||
[TestDetailJSON] nvarchar(max) NOT NULL,
|
|
||||||
[IsActive] bit NOT NULL,
|
|
||||||
[CreatedBy] nvarchar(1000) NOT NULL,
|
|
||||||
[Target] int NOT NULL,
|
|
||||||
[MaximumTheshold] int NOT NULL,
|
|
||||||
[PickableDepartments] nvarchar(max) NOT NULL,
|
|
||||||
PRIMARY KEY ([TestID])
|
|
||||||
);
|
|
||||||
GO
|
|
||||||
ALTER TABLE [fp].[APAdminPerformanceTest] ADD CONSTRAINT [DF__APAdminPe__Targe__5375AD4D] DEFAULT ((0)) FOR [Target]; GO
|
|
||||||
ALTER TABLE [fp].[APAdminPerformanceTest] ADD CONSTRAINT [DF__APAdminPe__Maxim__5469D186] DEFAULT ((0)) FOR [MaximumTheshold]; GO
|
|
||||||
ALTER TABLE [fp].[APAdminPerformanceTest] ADD CONSTRAINT [DF__APAdminPe__Picka__565219F8] DEFAULT ('') FOR [PickableDepartments]; GO
|
|
||||||
ALTER TABLE [fp].[APAdminPerformanceTest] ADD CONSTRAINT [DF__APAdminPe__TestI__6B4249E6] DEFAULT (newid()) FOR [TestID]; GO
|
|
||||||
ALTER TABLE [fp].[APAdminPerformanceTest] ADD CONSTRAINT [DF__APAdminPe__SortO__6C366E1F] DEFAULT ((0)) FOR [SortOrder]; GO
|
|
||||||
ALTER TABLE [fp].[APAdminPerformanceTest] ADD CONSTRAINT [DF__APAdminPe__TestT__6D2A9258] DEFAULT ((0)) FOR [TestTypeID]; GO
|
|
||||||
ALTER TABLE [fp].[APAdminPerformanceTest] ADD CONSTRAINT [DF__APAdminPe__TestN__6E1EB691] DEFAULT ('') FOR [TestName]; GO
|
|
||||||
ALTER TABLE [fp].[APAdminPerformanceTest] ADD CONSTRAINT [DF__APAdminPe__Descr__6F12DACA] DEFAULT ('') FOR [Description]; GO
|
|
||||||
ALTER TABLE [fp].[APAdminPerformanceTest] ADD CONSTRAINT [DF__APAdminPe__Budge__70FB233C] DEFAULT ((0)) FOR [BudgetConfigID]; GO
|
|
||||||
ALTER TABLE [fp].[APAdminPerformanceTest] ADD CONSTRAINT [DF__APAdminPe__Sourc__71EF4775] DEFAULT ('') FOR [SourceDimensionalityJSON]; GO
|
|
||||||
ALTER TABLE [fp].[APAdminPerformanceTest] ADD CONSTRAINT [DF__APAdminPe__TestD__72E36BAE] DEFAULT ('') FOR [TestDetailJSON]; GO
|
|
||||||
ALTER TABLE [fp].[APAdminPerformanceTest] ADD CONSTRAINT [DF__APAdminPe__IsAct__73D78FE7] DEFAULT ((0)) FOR [IsActive]; GO
|
|
||||||
ALTER TABLE [fp].[APAdminPerformanceTest] ADD CONSTRAINT [DF__APAdminPe__Creat__74CBB420] DEFAULT ('') FOR [CreatedBy]; GO
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
-- SCHEMA: fw
|
|
||||||
|
|
||||||
---------------------------------------------
|
|
||||||
-- TABLES
|
|
||||||
---------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------------
|
|
||||||
-- fw.ABBBudgetedCostPerRVU ------------------
|
|
||||||
---------------------------------------------
|
|
||||||
DROP TABLE [fw].[ABBBudgetedCostPerRVU];
|
|
||||||
GO
|
|
||||||
|
|
||||||
CREATE TABLE [fw].[ABBBudgetedCostPerRVU] (
|
|
||||||
[DepartmentID] int NOT NULL,
|
|
||||||
[AccountID] int NOT NULL,
|
|
||||||
[JobCodeID] int NOT NULL,
|
|
||||||
[PayCodeID] int NOT NULL,
|
|
||||||
[CostComponentID] int NOT NULL,
|
|
||||||
[CostingConfigGuid] uniqueidentifier NOT NULL,
|
|
||||||
[VariableDirectUnitCostPerRVU] decimal NULL,
|
|
||||||
[TotalVariableDirectCost] decimal NULL,
|
|
||||||
[TotalCost] decimal NULL
|
|
||||||
);
|
|
||||||
GO
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
-- SCHEMA: int
|
|
||||||
|
|
||||||
---------------------------------------------
|
|
||||||
-- TABLES
|
|
||||||
---------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------------
|
|
||||||
-- int.AggregatePostDIHistory ------------------
|
|
||||||
---------------------------------------------
|
|
||||||
DROP TABLE [int].[AggregatePostDIHistory];
|
|
||||||
GO
|
|
||||||
|
|
||||||
CREATE TABLE [int].[AggregatePostDIHistory] (
|
|
||||||
[AggregatePostDIHistoryGuid] uniqueidentifier NOT NULL,
|
|
||||||
[CreatedAtUtc] datetime NOT NULL,
|
|
||||||
[LastRanUtc] datetime NOT NULL,
|
|
||||||
[AggregatePostDIStatus] int NOT NULL,
|
|
||||||
PRIMARY KEY ([AggregatePostDIHistoryGuid])
|
|
||||||
);
|
|
||||||
GO
|
|
||||||
ALTER TABLE [int].[AggregatePostDIHistory] ADD CONSTRAINT [DF__Aggregate__Aggre__4EDF0E15] DEFAULT (newid()) FOR [AggregatePostDIHistoryGuid]; GO
|
|
||||||
ALTER TABLE [int].[AggregatePostDIHistory] ADD CONSTRAINT [DF__Aggregate__Creat__4FD3324E] DEFAULT (getutcdate()) FOR [CreatedAtUtc]; GO
|
|
||||||
ALTER TABLE [int].[AggregatePostDIHistory] ADD CONSTRAINT [DF__Aggregate__LastR__50C75687] DEFAULT ('1900-01-01 00:00:00.000') FOR [LastRanUtc]; GO
|
|
||||||
ALTER TABLE [int].[AggregatePostDIHistory] ADD CONSTRAINT [DF__Aggregate__Aggre__51BB7AC0] DEFAULT ((0)) FOR [AggregatePostDIStatus]; GO
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
-- SCHEMA: ob
|
|
||||||
|
|
||||||
---------------------------------------------
|
|
||||||
-- TABLES
|
|
||||||
---------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------------
|
|
||||||
-- ob.AccountVariabilityOverride ------------------
|
|
||||||
---------------------------------------------
|
|
||||||
DROP TABLE [ob].[AccountVariabilityOverride];
|
|
||||||
GO
|
|
||||||
|
|
||||||
CREATE TABLE [ob].[AccountVariabilityOverride] (
|
|
||||||
[AccountVariabilityOverrideID] int NOT NULL,
|
|
||||||
[DepartmentAssignment] nvarchar(800) NOT NULL,
|
|
||||||
[AccountAssignment] nvarchar(800) NOT NULL,
|
|
||||||
[PrecedentOrder] int NOT NULL,
|
|
||||||
[Variability] decimal NOT NULL,
|
|
||||||
PRIMARY KEY ([AccountVariabilityOverrideID])
|
|
||||||
);
|
|
||||||
GO
|
|
||||||
ALTER TABLE [ob].[AccountVariabilityOverride] ADD CONSTRAINT [DF__AccountVa__Depar__0EB4746A] DEFAULT ('') FOR [DepartmentAssignment]; GO
|
|
||||||
ALTER TABLE [ob].[AccountVariabilityOverride] ADD CONSTRAINT [DF__AccountVa__Accou__0FA898A3] DEFAULT ('') FOR [AccountAssignment]; GO
|
|
||||||
ALTER TABLE [ob].[AccountVariabilityOverride] ADD CONSTRAINT [DF__AccountVa__Prece__109CBCDC] DEFAULT ((0)) FOR [PrecedentOrder]; GO
|
|
||||||
ALTER TABLE [ob].[AccountVariabilityOverride] ADD CONSTRAINT [DF__AccountVa__Varia__1190E115] DEFAULT ((0)) FOR [Variability]; GO
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user