npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

sql-source-control-psl

v4.0.0

Published

Simple CLI for getting SQL into source control systems.

Downloads

3

Readme

NPM Version CI

SQL Source Control

CLI for scripting SQL objects into a flat file structure for use with source control systems.

Table of Contents

Features

  • 😎 Works with any source control system like Git, SVN, Mercurial, etc.
  • ✨ Supports all recent version of Microsoft SQL Server.
  • 🎁 Free and open source!

Installation

npm install -g sql-source-control-psl

Usage

Commands are directory specific, so run all commands in the directory you want the scripts created in.

ssc --help

Note: Make sure to enable TCP/IP in "SQL Server Network Configuration" settings (instructions). If TCP/IP is not enabled, you may receive a "failed to connect" error on commands.

ssc init

This will ask you a bunch of questions, and then write a config file for you.

If the current directory contains a Web.config file with the connectionStrings property, the first node will be used for default values. Alternatively, a path to a Web.config file can be specified with the --webconfig flag.

Options:

| Option | Alias | Type | Description | Default | | ------------- | ----- | --------- | ----------------------------------------------- | ------- | | --force | -f | boolean | Overwrite an existing config file, if present. | n/a | | --skip | -s | boolean | Use defaults and not prompt you for any options | n/a | | --webconfig | -w | string | Relative path to a Web.config file. | n/a |

ssc start

Start the day by running, this will start the watch over all your source controlled database folders.

ssc start

ssc bash

To increase the version ssc is uploading to, just run the bump command with the new version parameter

ssc bump

Options:

| Option | Alias | Type | Description | Default | | ------------- | ----- | --------- | ----------------------------------------------- | ------- | | --newversion | -nv | string | Specific the new version you wish to set for the connection | n/a | | --conn | -c | string | The name of the connection you wish to update | n/a |

ssc list

List all available connections specified in the configuration file.

Options:

| Option | Alias | Type | Description | Default | | ---------- | ----- | -------- | ----------------------------- | ---------- | | --config | -c | string | Relative path to config file. | ssc.json |

ssc pull [conn]

Generate SQL files for all tables, stored procedures, functions, etc. All scripts will be put in the output.root directory and SQL scripts will be organized into subdirectories (based on config file).

Within the output.root directory, cache.json is automatically generated and is intended to be committed into source repositories. This file stores checksums of each file for comparison, to reduce disk I/O.

Data can be included in the via the data option in the configuration file. All tables included in the data option will result in a file that truncates the table and inserts all rows. Because a truncate is issued, it is recommended to only include static data tables, like lookup tables, in the data configuration.

Arguments:

| Argument | Description | Default | | -------- | --------------------------------------- | --------------------------------------- | | conn | Optional name of the connection to use. | First available connection from config. |

Options:

| Option | Alias | Type | Description | Default | | ---------- | ----- | -------- | ----------------------------- | ---------- | | --config | -c | string | Relative path to config file. | ssc.json |

Example output (see here for full example):

./_sql-database
  ./data
    dbo.easy-lookup.sql
    ...
  ./functions
    dbo.complex-math.sql
    dbo.awesome-table-function.sql
    ...
  ./jobs
    amazing-things.sql
    ...
  ./schemas
    dbo.sql
    ...
  ./stored-procedures
    dbo.people-read.sql
    ...
  ./tables
    dbo.people.sql
    ...
  ./types
    dbo.people-type.sql
    ...
  ./views
    dbo.super-cool-view.sql
    ...

ssc push [conn]

Execute all local scripts against the requested database.

Arguments:

| Argument | Description | Default | | -------- | --------------------------------------- | --------------------------------------- | | conn | Optional name of the connection to use. | First available connection from config. |

Options:

| Option | Alias | Type | Description | Default | | ---------- | ----- | --------- | ----------------------------- | ---------- | | --config | -c | string | Relative path to config file. | ssc.json | | --skip | -s | boolean | Skip user warning prompt. | false |

Configuration

Configuration options are stored in a ssc.json file. The following properties are supported:

connections (object[], string): Relative path to a Web.config file with connectionStrings, a ssc-connections.json file with an array of connections, or an array of connections with the following properties:

| Property | Type | Description | Default | | ---------- | -------- | ---------------- | ------- | | name | string | Connection name. | n/a | | server | string | Server name. | n/a | | database | string | Database name. | n/a | | port | number | Server port. | n/a | | user | string | Login username. | n/a | | password | string | Login password. | n/a |

files (string[]): Optional. Glob of files to include/exclude during the pull command. Default includes all files.

data (string[]): Optional. Glob of table names to include for data scripting during the pull command. Default includes none.

output (object): Optional. Defines paths where files will be scripted during the pull command. The following properties are supported:

| Property | Type | Description | Default | | ----------- | -------- | ------------------------------------------------------ | --------------------- | | root | string | Directory for scripted files, relative to config file. | ./_sql-database | | data | string | Subdirectory for data files. | ./data | | functions | string | Subdirectory for function files. | ./functions | | jobs | string | Subdirectory for jobs files. | ./jobs | | procs | string | Subdirectory for stored procedure files. | ./stored-procedures | | schemas | string | Subdirectory for schema files. | ./schemas | | tables | string | Subdirectory for table files. | ./tables | | triggers | string | Subdirectory for trigger files. | ./triggers | | types | string | Subdirectory for table valued parameter files. | ./types | | views | string | Subdirectory for view files. | ./views |

idempotency (object): Optional. Defines what type of idempotency will scripted during the pull command. The following properties are supported.

| Property | Type | Description | Default | | ----------- | ------------ | --------------------------------------------------- | ---------------- | | data | string (2) | Idempotency for data files. | truncate | | functions | string (1) | Idempotency for function files. | if-exists-drop | | jobs | string (1) | Idempotency for job files. | if-exists-drop | | procs | string (1) | Idempotency for stored procedure files. | if-exists-drop | | tables | string (1) | Idempotency for table files. | if-not-exists | | triggers | string (1) | Idempotency for trigger files. | if-exists-drop | | types | string (1) | Idempotency for user defined table parameter files. | if-not-exists | | views | string (1) | Idempotency for view files. | if-exists-drop |

  1. if-exists-drop, if-not-exists, or false.
  2. delete-and-reseed, delete, truncate, or false.

includeConstraintName (boolean): Optional. Indicates if constraint names should be scripted. Default is false.

eol (string): Optional. Line ending character (auto, crlf, or lf). Default is auto.

Note: See Git documentation for information about how Git handles line endings.

Examples

Connections

Basic connections.

{
  "connections": [
    {
      "name": "dev",
      "server": "localhost\\development",
      "database": "awesome-db",
      "port": 1433,
      "user": "example",
      "password": "qwerty"
    }
  ]
}

Connections stored in Web.config file. The Web.config should be an XML .NET config file.

{
  "connections": "./Web.config"
}

Connection strings can follow any of the following formats:

<connectionStrings>
  <add name="Example1" connectionString="server=MySqlServer;database=MySqlDb;uid=MyUsername;password=MyPassword;" />
  <add name="Example2" connectionString="server=MySqlServer;database=MySqlDb;uid=MyUsername;pwd=MyPassword;" />
  <add name="Example3" connectionString="server=MySqlServer,1433;database=MySqlDb;uid=MyUsername;pwd=MyPassword;" />
</connectionStrings>

Connections stored in separate JSON file. Storing connections in a separate JSON can be used in conjunction with a .gitignore entry to prevent user connections or sensitive data from being committed.

{
  "connections": "./ssc-connections.json"
}

Files

Only include certain files.

{
  // ...
  "files": ["dbo.*"]
}

Exclude certain files.

{
  // ...
  "files": ["*", "!dbo.*"]
}

Data

Only include certain tables.

{
  // ...
  "data": ["dbo.*"]
}

Exclude certain tables.

{
  // ...
  "data": ["*", "!dbo.*"]
}

Output

Override default options.

{
  // ...
  "output": {
    "root": "./my-database",
    "procs": "./my-procs",
    "triggers": false
  }
}

Idempotency

Override default options.

{
  // ...
  "idempotency": {
    "triggers": false,
    "views": "if-not-exists"
  }
}

Defaults

Default configuration values.

{
  "connections": [],
  "files": [],
  "data": [],
  "output": {
    "root": "./_sql-database",
    "data": "./data",
    "functions": "./functions",
    "jobs": "./jobs",
    "procs": "./stored-procedures",
    "schemas": "./schemas",
    "tables": "./tables",
    "triggers": "./triggers",
    "types": "./types",
    "views": "./views"
  },
  "idempotency": {
    "data": "truncate",
    "functions": "if-exists-drop",
    "jobs": "if-exists-drop",
    "procs": "if-exists-drop",
    "tables": "if-not-exists",
    "triggers": "if-exists-drop",
    "types": "if-not-exists",
    "views": "if-exists-drop"
  }
}

Development

Clone the repo and run the following commands in the sql-source-control directory:

npm install
npm link
npm run build

To use local docker container:

npm run docker:up
./docker/restore.ps1

ssc pull -c ./docker/config.json