lib-migrations-sql 0.1.0

SQL migrations built on lib-migrations-core
Documentation
lib-migrations-sql, rust, migrations, sql, sqlite

## Overview
- SQL migration layer built on lib-migrations-core
- SqlMigration for SQL-string-based migrations
- SqliteStore for SQLite migration tracking
- SqliteContext for SQLite execution

## Features
- `sqlite` (default) - SQLite support via rusqlite

## Usage
```rust
use lib_migrations_sql::{SqlMigration, SqliteStore, SqliteContext, MigrationRunner};

let store = SqliteStore::open("migrations.db")?;
let mut ctx = SqliteContext::open("app.db")?;

let mut runner = MigrationRunner::new(store)
    .add(SqlMigration::new(1, "create_users",
        "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)")
        .with_down("DROP TABLE users"))
    .add(SqlMigration::new(2, "add_email",
        "ALTER TABLE users ADD COLUMN email TEXT"));

runner.init()?;
runner.migrate(&mut ctx)?;
```

## Custom Database
Implement `SqlExecutor` for your database:
```rust
impl SqlExecutor for MyDatabase {
    type Error = MyError;
    fn execute(&mut self, sql: &str) -> Result<(), Self::Error> {
        self.run_sql(sql)
    }
}
```

## Separate Store and Context
- Store tracks which migrations applied (_migrations table)
- Context executes the actual SQL
- Can be same or different databases