forked from ericsink/SQLitePCL.raw
-
Notifications
You must be signed in to change notification settings - Fork 0
/
todo.txt
365 lines (250 loc) · 8.93 KB
/
todo.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
cleanup src/tests+t2, include sqlcipher as well
lib package for xamarin mac
clean up top level readme
clean up blog release notes page
finish writing v2 changes page
test with zetetic
--
for the sake of code coverage it would be nice to test
attempting to create an a utf8z with a span that does
not have a zero terminator and Assert.Throws(). but
that constructor is not public and probably should not be.
UWP test runner has problems with win32_set_dir and the
sqlite3_config tests
when trying to build on Mac, why isn't t4 in the path?
there are a couple of providers we may not need
anymore. ifdefs in gen_nuspec. like sqlite3 dllimport
for example.
how to pass null to the tail for sqlite3_prepare_?
chg the pinvoke signature from out byte* to byte**
and pass null.
understand why Span seems nullable when it is not
might want bind_blob to allow specifying something
other than transient. in the current implementation,
sqlite makes a copy of the blob every time. same for
bind_text as well.
--
need higher level typed delegate overloads for
sqlite3_trace_v2(). but problem with mapping
IntPtr (in the callback) to the actual safehandle.
or remove trace_v2 for now.
for a ReadOnlySpan<byte> without a null terminator:
empty "string" is indistinguishable from null string.
sqlite3_create_window_function
sqlite3_normalized_sql
sqlite3_value_frombind
sqlite3_serialize
sqlite3_deserialize
sqlite3_keyword_count/name/check
need 3 ways of doing dynamic load:
plain name, used for winsqlite3
look for runtimes/rid
look for x86/x64
do these by chance map nicely on to the flags
for S.R.I.NativeLibrary ?
need tests for bundle_green ?
winsqlite3 xunit with net461 test aborted. works
fine with fake_xunit.
verify versions of libtomcrypt. submodule?
xDelete fails on UWP. but the call that fails comes
from the result of db_filename? probably not related.
wrong directory? needs a path?
instead of GetExecutingAssembly, should use
typeof(TODO).Assembly ?
android: 70 pass, 2 fail
create_table_file
wal
can ios use provider dynamic with null for
the dlopen argument? seems like I tried this
and it didn't work, but I don't remember for sure.
need a test that actually uses the prepare flags
for sqlite3_prepare_v3, like persistent
restore those win32 set directory calls somewhere?
but we don't want ifdef down in raw or provider.
maybe in batteries? problem is they prevent a
sqlite3_config() call.
NativeMethods.sqlite3_win32_set_directory(/*data directory type*/1, Windows.Storage.ApplicationData.Current.LocalFolder.Path);
NativeMethods.sqlite3_win32_set_directory(/*temp directory type*/2, Windows.Storage.ApplicationData.Current.TemporaryFolder.Path);
--
investigate GC.AddMemoryPressure()
investigate new utf8 things in System.Memory pkg
multi-target to avoid dep on System.Memory for netcore2.1+ ?
need some tests for sqlite-ish case insensitivity of
collation names
--
revisit passing 'object' as user data round trip
through a callback
--
instead of just IGetFunctionPointer, should
we have IResolveLibrary? how should we wrap the
Load part of NativeLibrary? or maybe the resulting
IGetFunctionPointer is all that matters, since that's
all provider.dynamic needs?
but who owns the dll handle, and therefore has the
obligation to free it?
explore bundle native code in embedded resource,
extract to known location and use provider dynamic.
would allow builds to be done entirely without
xamarin sdks. but the location to write the dll
would need to be injected from platform code?
to be even more ridiculous, we could bundle the
native code in C# as a binary array. :-) at
least then we would eliminate all involvement
from msbuild.
problem with embed is that it won't work for all
platforms, still prefer runtimes folder for .net core.
which means we need two copies?
use embed for ios and android, like now? but
for ios, better than static. and both avoid the
need for platform-specific build sdk stuff?
or maybe just emulate the runtimes folder on all
platforms? ios and android included?
hmph. xam android says normal content item is
not supported. and xam ios also.
but does plain embedded resource work on both
android and ios?
might need to go back to separating the nuget
packages for e_sqlite3 and e_sqlcipher by
platform? still don't need v120 and v110 and
so on. but maybe windows, mac, linux separate
again. but ms ships libuv with all platforms
in one package...
resolver should probably check File.Exists
(on things that are an absolute path) before trying
LoadLibrary/dlopen.
--
gen_nuspec should write the same EOL convention
on all platforms. using XmlWriterSettings. NewLineChars
doesn't seem to do what it should. actually, that
seems fine. now the problem is the slash-vs-backslash
issue in the nuspec paths.
whether in embedded resource or just a content
file, test using the dylib for ios. or perhaps not.
review EntryPoint attribute
fix build script to do clean
NuspecProperties doesn't work for PackageTags
because of the semicolon inside it. how to escape
that?
use new t4 local cli tool package
PlatformNotSupportedException
logged, mono/t4 #42, fix pending
need push script. reads the xml file to get
the version
.editorconfig
should the other batteries also build on a placeholder
instead of the actual ios lib assembly? allows
dotnet cli instead of desktop msbuild.
with an SDK-style net461 project, how to control
the cpu target of the build? msbuild prop Platform?
I wonder if there are any other ways that v2 breaks
the existing zetetic package.
nuspec should show SQLitePCLRaw org account as
owner?
DONE: consider default enable_next_stmt() to false
msbuild props to omit native builds in targets?
concern about dictionary<intptr, T> because it's
a value type? ios AOT. ToString() instead?
it would seem that the latest versions of mono
now support this case.
DONE: maybe v2 should use the v141 builds and include arm64
--
the top half of the provider class is the
same for dynamic vs dllimport. use a partial
class and share it?
new sn key for lib.e_sqlcipher. hmmm.
or should we just use the same one as before?
and why do we have the same key for
the android and ios versions of this?
same goes for e_sqlite3.
--
in general, only one of the following is true:
win, LoadLibrary, dll suffix
everything else, dlopen
macos, dylib suffix
everything else, so suffix
ios: either system or internal
android: std places
just load e_sqlite3?
.net core: should find from rid, just
load "e_sqlite3" ?
mono on mac
Xamarin.Mac
mono on linux
.net framework on windows
subdirs from the targets file
cdecl vs stdcall?
maybe everything which needs a targets file should
also need to pass more info (a path) to Setup
--
constructing the string:
basename
e_sqlite3
e_sqlcipher
sqlite3
sqlcipher
add dll/dylib/so suffix
path
starting
cwd
executingassembly.location
other?
subdir
nothing?
native/rid (targets)
--
review the weird stuff agg functions do
with the context pointer
--
need to setup some x86 stdcall builds for testing?
or just use winsqlite3 itself. irritating that
the test suite passes using winsqlite3 and either
calling convention. why?
goal is to have no ifdefs in core
--
in the readme, explain why iOS lib has static in name.
and why internal. and why SQLitePCL.lib.embedded.Init()
need the ability to disconnect:
1. the env used to compile an assembly
2. the lib/env dir in nuget
for bundle_e_sqlite3, we want to build two things for netstandard11:
1. e_sqlite3, into netcoreapp
2. none, into netstandard11
enable_shared_cache. is this present? does akavache need it?
change the targets files
to not do the copy when packages.config is present?
understand runtime.json and rid-specific deps, even
if they are not officially supported
--------
is CopyNuGetImplementations causing trouble?
with project.json : runtimes?
need to go to nuget.org and mark some of the older
packages deprecated
maybe the "first pinvoke set that works" code should
go somewhere else, higher up?
--------
can we do a dylib ios version?
----
docs on all the methods in raw, especially where the params
differ from the C API
----------------
sqlite API issues:
should sqlite3_commit_hook() return something? the C function returns the
user pointer, which has no useful parallel for us to return. I sort of hate
the fact that it returns void, since we can't check errors on it. but
the underlying C function doesn't really return any useful info for error
checking either.
should maybe use the value from commit_hook (and rollback_hook) internally
to verify/dispose the hook_handle?
unprotected sqlite3_value: sqlite3_column_value, sqlite3_bind_value, sqlite3_result_value
sqlite3_create_module
sqlite3_db_mutex
sqlite3_get_auxdata
sqlite3_set_auxdata
sqlite3_randomness
sqlite3_wal_autocheckpoint
sqlite3_wal_checkpoint
sqlite3_wal_checkpoint_v2
sqlite3_wal_hook
sqlite3_busy_handler
sqlite3_collation_needed -- difficult because of the be handle passed
to the callback