MCPcopy
hub / github.com/Effect-TS/effect / make

Function make

packages/sql-sqlite-do/src/SqliteClient.ts:68–190  ·  view source on GitHub ↗
(
  options: SqliteClientConfig
)

Source from the content-addressed store, hash-verified

66 * @since 1.0.0
67 */
68export const make = (
69 options: SqliteClientConfig
70): Effect.Effect<SqliteClient, never, Scope.Scope | Reactivity.Reactivity> =>
71 Effect.gen(function*() {
72 const compiler = Statement.makeCompilerSqlite(options.transformQueryNames)
73 const transformRows = options.transformResultNames
74 ? Statement.defaultTransforms(options.transformResultNames).array
75 : undefined
76
77 const makeConnection = Effect.gen(function*() {
78 const db = options.db
79
80 function* runIterator(
81 sql: string,
82 params: ReadonlyArray<unknown> = []
83 ) {
84 const cursor = db.exec(sql, ...params)
85 const columns = cursor.columnNames
86 for (const result of cursor.raw()) {
87 const obj: any = {}
88 for (let i = 0; i < columns.length; i++) {
89 const value = result[i]
90 obj[columns[i]] = value instanceof ArrayBuffer ? new Uint8Array(value) : value
91 }
92 yield obj
93 }
94 }
95
96 const runStatement = (
97 sql: string,
98 params: ReadonlyArray<unknown> = []
99 ): Effect.Effect<ReadonlyArray<any>, SqlError, never> =>
100 Effect.try({
101 try: () => Array.from(runIterator(sql, params)),
102 catch: (cause) => new SqlError({ cause, message: `Failed to execute statement` })
103 })
104
105 const runValues = (
106 sql: string,
107 params: ReadonlyArray<unknown> = []
108 ): Effect.Effect<ReadonlyArray<any>, SqlError, never> =>
109 Effect.try({
110 try: () =>
111 Array.from(db.exec(sql, ...params).raw(), (row) => {
112 for (let i = 0; i < row.length; i++) {
113 const value = row[i]
114 if (value instanceof ArrayBuffer) {
115 row[i] = new Uint8Array(value) as any
116 }
117 }
118 return row
119 }),
120 catch: (cause) => new SqlError({ cause, message: `Failed to execute statement` })
121 })
122
123 return identity<Connection>({
124 execute(sql, params, transformRows) {
125 return transformRows

Callers 1

layerFunction · 0.70

Calls 8

identityFunction · 0.85
restoreFunction · 0.85
withPermitsMethod · 0.80
releaseMethod · 0.80
entriesMethod · 0.80
takeMethod · 0.65
addFinalizerMethod · 0.65
makeMethod · 0.65

Tested by

no test coverage detected