Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(sql): add sql standard interfaces #5

Open
wants to merge 32 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
e5458d8
feat(collections): add deferred stack
halvardssm May 30, 2024
933e358
feat(sql): add sql standard interfaces
halvardssm May 30, 2024
e12113e
cleanup
halvardssm May 30, 2024
8d2d6ba
Removed SqlBase with dedicated version
halvardssm Jun 6, 2024
babbcd5
fix(collections): added release and remove callbacks
halvardssm Jun 7, 2024
02e8947
Changed and simplified the structure for inheritance and flow
halvardssm Jun 7, 2024
64505a3
Updated inheritance logic and test cases
halvardssm Jun 20, 2024
55ec4b4
Cleaned up test names
halvardssm Jun 20, 2024
a307add
added coverage to exclude for lint and coverage
halvardssm Jun 20, 2024
a5586af
updated asserts and testing helpers
halvardssm Jun 22, 2024
15be3cd
Updated docs
halvardssm Jun 28, 2024
c6356bf
Updated readme, and added constructor restrictions for clients
halvardssm Jul 13, 2024
152773c
Fixed workspace breaking update
halvardssm Jul 13, 2024
54ad380
fixed type issues
halvardssm Jul 13, 2024
3f022b3
Added deallocated to prepared statement
halvardssm Jul 30, 2024
ae7fc9b
Updated readme
halvardssm Jul 30, 2024
85605ad
Merge branch 'main' of github.com:halvardssm/deno_stdext into feat/sql
halvardssm Aug 10, 2024
1207bcb
renamed directory from sql to database/sql
halvardssm Oct 2, 2024
9627edb
updated readmes and deno.json
halvardssm Oct 2, 2024
9ab2ded
Added local workspaces to imports
halvardssm Oct 2, 2024
ad1db40
updated tests
halvardssm Oct 2, 2024
2bc309d
Updated generics and types
halvardssm Oct 3, 2024
a9718db
Updated names and type signatures
halvardssm Oct 6, 2024
5fa2053
Merge branch 'main' of github.com:halvardssm/deno_stdext into feat/sql
halvardssm Oct 15, 2024
633ba26
Improved readme
halvardssm Oct 15, 2024
4646cce
Added override to inherited class properties
halvardssm Oct 15, 2024
614475c
Added version contraints for packages
halvardssm Oct 15, 2024
e824791
Merge branch 'main' of github.com:halvardssm/deno_stdext into feat/sql
halvardssm Oct 15, 2024
a2b0817
feat(types): added type and improved documentation
halvardssm Oct 16, 2024
ec2c55e
fix(assert): Added message as option argument to asserts, and added o…
halvardssm Oct 16, 2024
ecf2c53
chore(crypto): change ts-ignore to ts-expect-error
halvardssm Oct 16, 2024
87a1f4b
fix(database/sql): cleaned up asserts, improved interfaces, and impro…
halvardssm Oct 16, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,16 @@ console.log(dump(buffer));

## Packages

- [collections](https://jsr.io/@stdext/collections): The collections package
contains commonly used utilities and structures
- [crypto](https://jsr.io/@stdext/crypto): The crypto package contains utility
for crypto and hashing
- [encoding](https://jsr.io/@stdext/encoding): The encoding package contains
utility for text encoding.
- [http](https://jsr.io/@stdext/http): The http package contains utility for
fetching and http servers
- [sql](https://jsr.io/@stdext/sql): The SQL package contains a standard
interface for SQL based databases

## Versioning

Expand Down
17 changes: 17 additions & 0 deletions collections/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# @stdext/collections

The collections package contains commonly used utilities and structures.

## Entrypoints

### Deferred Stack

Contains the DeferredStack utility class.

```ts
const deferred = new DeferredStack<number>({ maxSize: 1 });
deferred.add(1);
const e1 = await deferred.pop();
setTimeout(() => e1.release(), 5000);
const e2 = await deferred.pop(); // will be queued until e1 is released
```
220 changes: 220 additions & 0 deletions collections/deferred_stack.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
import { assert, assertEquals, assertFalse, assertThrows } from "@std/assert";
import { DeferredStack } from "./deferred_stack.ts";

Deno.test("deferred", async (t) => {
await t.step("fill and empty x2", async () => {
const deferred = new DeferredStack<number>({ maxSize: 2 });
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 0);
assertEquals(deferred.stack.length, 0);
assertEquals(deferred.queue.length, 0);
assertEquals(deferred.totalCount, 0);
assertEquals(deferred.inUseCount, 0);
assertEquals(deferred.availableCount, 0);
assertEquals(deferred.queuedCount, 0);

deferred.add(1);
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 1);
assertEquals(deferred.stack.length, 1);
assertEquals(deferred.queue.length, 0);
assertEquals(deferred.totalCount, 1);
assertEquals(deferred.inUseCount, 0);
assertEquals(deferred.availableCount, 1);
assertEquals(deferred.queuedCount, 0);

deferred.add(2);
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 2);
assertEquals(deferred.stack.length, 2);
assertEquals(deferred.queue.length, 0);
assertEquals(deferred.totalCount, 2);
assertEquals(deferred.inUseCount, 0);
assertEquals(deferred.availableCount, 2);
assertEquals(deferred.queuedCount, 0);

assertThrows(() => deferred.add(3), Error, "Max size reached");
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 2);
assertEquals(deferred.stack.length, 2);
assertEquals(deferred.queue.length, 0);
assertEquals(deferred.totalCount, 2);
assertEquals(deferred.inUseCount, 0);
assertEquals(deferred.availableCount, 2);
assertEquals(deferred.queuedCount, 0);

const e1 = await deferred.pop();
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 2);
assertEquals(deferred.stack.length, 1);
assertEquals(deferred.queue.length, 0);
assertEquals(deferred.totalCount, 2);
assertEquals(deferred.inUseCount, 1);
assertEquals(deferred.availableCount, 1);
assertEquals(deferred.queuedCount, 0);
assertEquals(e1.active, true);
assertEquals(e1.value, 2);
await e1.release();
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 2);
assertEquals(deferred.stack.length, 2);
assertEquals(deferred.queue.length, 0);
assertEquals(deferred.totalCount, 2);
assertEquals(deferred.inUseCount, 0);
assertEquals(deferred.availableCount, 2);
assertEquals(deferred.queuedCount, 0);
assertEquals(e1.active, false);
assertThrows(() => e1.value, Error, "Element is not active");

const e2 = await deferred.pop();
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 2);
assertEquals(deferred.stack.length, 1);
assertEquals(deferred.queue.length, 0);
assertEquals(deferred.totalCount, 2);
assertEquals(deferred.inUseCount, 1);
assertEquals(deferred.availableCount, 1);
assertEquals(deferred.queuedCount, 0);
assertEquals(e1.active, false);
assertEquals(e2.active, true);
assertEquals(e2.value, 2);

const e3 = await deferred.pop();
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 2);
assertEquals(deferred.stack.length, 0);
assertEquals(deferred.queue.length, 0);
assertEquals(deferred.totalCount, 2);
assertEquals(deferred.inUseCount, 2);
assertEquals(deferred.availableCount, 0);
assertEquals(deferred.queuedCount, 0);
assertEquals(e1.active, false);
assertEquals(e3.active, true);
assertEquals(e3.value, 1);

let e4Resolved = false;
let e5Resolved = false;

const e4 = deferred.pop().then((r) => {
e4Resolved = true;
return r;
});
assertFalse(e4Resolved);
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 2);
assertEquals(deferred.stack.length, 0);
assertEquals(deferred.queue.length, 1);
assertEquals(deferred.totalCount, 2);
assertEquals(deferred.inUseCount, 2);
assertEquals(deferred.availableCount, 0);
assertEquals(deferred.queuedCount, 1);

const e5 = deferred.pop().then((r) => {
e5Resolved = true;
return r;
});
assertFalse(e5Resolved);
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 2);
assertEquals(deferred.stack.length, 0);
assertEquals(deferred.queue.length, 2);
assertEquals(deferred.totalCount, 2);
assertEquals(deferred.inUseCount, 2);
assertEquals(deferred.availableCount, 0);
assertEquals(deferred.queuedCount, 2);

await e2.release();
await e4;
assert(e4Resolved);
assertFalse(e5Resolved);
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 2);
assertEquals(deferred.stack.length, 0);
assertEquals(deferred.queue.length, 1);
assertEquals(deferred.totalCount, 2);
assertEquals(deferred.inUseCount, 2);
assertEquals(deferred.availableCount, 0);
assertEquals(deferred.queuedCount, 1);
assertEquals(e1.active, false);
assertEquals(e2.active, false);

await e3.release();
await e5;
assert(e5Resolved);
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 2);
assertEquals(deferred.stack.length, 0);
assertEquals(deferred.queue.length, 0);
assertEquals(deferred.totalCount, 2);
assertEquals(deferred.inUseCount, 2);
assertEquals(deferred.availableCount, 0);
assertEquals(deferred.queuedCount, 0);
assertEquals(e1.active, false);
assertEquals(e2.active, false);
assertEquals(e3.active, false);

await (await e4).release();
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 2);
assertEquals(deferred.stack.length, 1);
assertEquals(deferred.queue.length, 0);
assertEquals(deferred.totalCount, 2);
assertEquals(deferred.inUseCount, 1);
assertEquals(deferred.availableCount, 1);
assertEquals(deferred.queuedCount, 0);
assertEquals(e1.active, false);
assertEquals(e2.active, false);
assertEquals(e3.active, false);
assertEquals((await e4).active, false);

await (await e5).release();
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 2);
assertEquals(deferred.stack.length, 2);
assertEquals(deferred.queue.length, 0);
assertEquals(deferred.totalCount, 2);
assertEquals(deferred.inUseCount, 0);
assertEquals(deferred.availableCount, 2);
assertEquals(deferred.queuedCount, 0);
assertEquals(e1.active, false);
assertEquals(e2.active, false);
assertEquals(e3.active, false);
assertEquals((await e4).active, false);
assertEquals((await e5).active, false);

const e6 = await deferred.pop();
await e6.remove();
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 1);
assertEquals(deferred.stack.length, 1);
assertEquals(deferred.queue.length, 0);
assertEquals(deferred.totalCount, 1);
assertEquals(deferred.inUseCount, 0);
assertEquals(deferred.availableCount, 1);
assertEquals(deferred.queuedCount, 0);
assertEquals(e1.active, false);
assertEquals(e2.active, false);
assertEquals(e3.active, false);
assertEquals((await e4).active, false);
assertEquals((await e5).active, false);
assertEquals(e6.active, false);

const e7 = await deferred.pop();
await e7.remove();
assertEquals(deferred.maxSize, 2);
assertEquals(deferred.elements.length, 0);
assertEquals(deferred.stack.length, 0);
assertEquals(deferred.queue.length, 0);
assertEquals(deferred.totalCount, 0);
assertEquals(deferred.inUseCount, 0);
assertEquals(deferred.availableCount, 0);
assertEquals(deferred.queuedCount, 0);
assertEquals(e1.active, false);
assertEquals(e2.active, false);
assertEquals(e3.active, false);
assertEquals((await e4).active, false);
assertEquals((await e5).active, false);
assertEquals(e6.active, false);
assertEquals(e7.active, false);
});
});
Loading