Coder Social home page Coder Social logo

amphp2-sqlite's Introduction

amphp2-sqlite

License

nicodinus/amphp2-sqlite is a non-blocking sqlite client for amphp:^2.6 using parallel

Installation

composer require nicodinus/amphp2-sqlite

Usage

<?php

declare(strict_types=1);

use Amp\Loop;
use Vajexal\AmpSQLite\SQLiteCommandResult;
use Vajexal\AmpSQLite\SQLiteConnection;
use Vajexal\AmpSQLite\SQLiteResultSet;
use Vajexal\AmpSQLite\SQLiteStatement;
use function Vajexal\AmpSQLite\connect;

require_once 'vendor/autoload.php';

Loop::run(function () {
    /** @var SQLiteConnection $connection */
    $connection = yield connect('database.sqlite');

    yield $connection->execute('drop table if exists users');
    yield $connection->execute('create table users (id integer primary key, name text not null)');
    yield $connection->execute('insert into users (name) values (:name)', [
        ':name' => 'Bob',
    ]);

    /** @var SQLiteResultSet $results */
    $results = yield $connection->query('select * from users');
    while (yield $results->advance()) {
        $row = $results->getCurrent();
        echo "Hello {$row['name']}\n";
    }

    /** @var SQLiteStatement $statement */
    $statement = yield $connection->prepare('update users set name = :name where id = 1');
    /** @var SQLiteCommandResult $result */
    $result = yield $statement->execute([
        ':name' => 'John',
    ]);
    echo "Updated {$result->getAffectedRowCount()} rows\n";
});

Transactions

<?php

declare(strict_types=1);

use Amp\Loop;
use Vajexal\AmpSQLite\SQLiteConnection;
use Vajexal\AmpSQLite\SQLiteTransaction;
use function Vajexal\AmpSQLite\connect;

require_once 'vendor/autoload.php';

Loop::run(function () {
    /** @var SQLiteConnection $connection */
    $connection = yield connect('database.sqlite');

    yield $connection->execute('drop table if exists users');
    yield $connection->execute('create table users (id integer primary key, name text not null)');

    /** @var SQLiteTransaction $transaction */
    $transaction = yield $connection->beginTransaction();
    yield $transaction->execute('insert into users (name) values (:name)', [
        ':name' => 'Bob',
    ]);

    yield $transaction->createSavepoint('change_name');
    yield $transaction->execute('update users set name = :name where id = 1', [
        ':name' => 'John',
    ]);
    yield $transaction->releaseSavepoint('change_name');

    yield $transaction->commit();
});

amphp2-sqlite's People

Contributors

vajexal avatar nicodinus avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.