[sqlite] Weird chars inserted

2016-12-18 Thread Ariel M. Martin
Hi people. I need some help I’m lost here.
I’m writing an application using SQLite and whenever I insert Spanish characters
I get this kind of strings:
Mart�n (where it should read ‘Martín’)

Ok, so if I open my database with SQLiteManager (the Firefox addin) my strings 
look
weird like that. But SQLiteManager is able to insert and display any string 
correctly.
And any string inserted by SQLiteManager displays all right in my app as well.

So I must be doing something wrong when I insert the strings. This is my code:

Note: szSQL is the wchar-string my app uses

char szAux[2048];
ZeroMemory(szAux, 2048);
WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, szSQL, wcslen(szSQL), 
szAux, 2048, NULL, 0);

int nRet= sqlite3_exec(m_hDB, szAux, NULL, 0, &pErrMsg);


SQLiteManager tells me that my db is utf-16le. Im using vs2015 in a Windows10 
64bit machine.

I’d appreciate any help.
Thanks in advance!

Ariel M. Martin

___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Weird chars inserted

2016-12-18 Thread Jean-Christophe Deschamps

Ariel,

At 02:38 18/12/2016, you wrote:


Hi people. I need some help I’m lost here.
I’m writing an application using SQLite and whenever I insert 
Spanish characters

I get this kind of strings:
Mart�n (where it should read ‘Martín’)

Ok, so if I open my database with SQLiteManager (the Firefox addin) my 
strings look
weird like that. But SQLiteManager is able to insert and display any 
string correctly.
And any string inserted by SQLiteManager displays all right in my app 
as well.


So I must be doing something wrong when I insert the strings. This is 
my code:


Note: szSQL is the wchar-string my app uses

char szAux[2048];
ZeroMemory(szAux, 2048);
WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, szSQL, 
wcslen(szSQL), szAux, 2048, NULL, 0);


int nRet= sqlite3_exec(m_hDB, szAux, NULL, 0, &pErrMsg);


SQLiteManager tells me that my db is utf-16le. Im using vs2015 in a 
Windows10 64bit machine.


Since your DB is UTF-16LE encoded, you shouldn't convert your strings 
to UTF8.


int nRet= sqlite3_exec(m_hDB, szSQL, NULL, 0, &pErrMsg);

alone should work fine.

___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Weird chars inserted

2016-12-18 Thread Igor Tandetnik

On 12/17/2016 8:38 PM, Ariel M. Martin wrote:

Note: szSQL is the wchar-string my app uses

char szAux[2048];
ZeroMemory(szAux, 2048);
WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, szSQL, wcslen(szSQL), 
szAux, 2048, NULL, 0);


Replace CP_ACP with CP_UTF8.
--
Igor Tandetnik

___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Weird chars inserted

2016-12-18 Thread Igor Tandetnik

On 12/18/2016 7:17 AM, Jean-Christophe Deschamps wrote:

Since your DB is UTF-16LE encoded, you shouldn't convert your strings to
UTF8.

int nRet= sqlite3_exec(m_hDB, szSQL, NULL, 0, &pErrMsg);

alone should work fine.


No it should not. The encoding of the database is irrelevant here: 
sqlite3_exec still expects a UTF-8 encoded string. There are SQLite API 
functions that accept UTF-16 strings (e.g. sqlite3_bind_text16), but 
sqlite3_exec is not one of them.

--
Igor Tandetnik

___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


[sqlite] Unexpected 'no such column' with expression in subquery ORDER BY

2016-12-18 Thread Keith Maxwell
I've read the documentation[1] a few times and I don't understand why I get:

Error: no such column: z

with a query like the one below:

CREATE TABLE t1(x INTEGER, y INTEGER);
INSERT INTO t1(x, y) VALUES(2, 1), (3, 2), (6, 4);
CREATE TABLE t2(z INTEGER);
INSERT INTO t2(z) VALUES(4);
SELECT (SELECT y FROM t1 ORDER BY abs(x - z) LIMIT 1) FROM t2;

I expect to get a result like:

SELECT (SELECT y FROM t1 ORDER BY abs(x - 4) LIMIT 1) FROM t2;
2

The actual query I'm trying to write is more complicated and involves date
functions; I hope this explains enough. I'm using 3.15.2:

sqlite> .version
SQLite 3.15.2 2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8

I appreciate any help you can offer. Thanks in advance!

Keith Maxwell

[1] https://www.sqlite.org/lang_select.html#order-by
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Unexpected 'no such column' with expression in subquery ORDER BY

2016-12-18 Thread Simon Slavin

On 18 Dec 2016, at 1:57pm, Keith Maxwell  wrote:

>CREATE TABLE t1(x INTEGER, y INTEGER);
>INSERT INTO t1(x, y) VALUES(2, 1), (3, 2), (6, 4);
>CREATE TABLE t2(z INTEGER);
>INSERT INTO t2(z) VALUES(4);
>SELECT (SELECT y FROM t1 ORDER BY abs(x - z) LIMIT 1) FROM t2;

I’m puzzled by your syntax.  Your sub-select refers only to to table t1.  That 
table has only columns x and y.  It has no access to values for z.

Now suppose, despite this, the sub-select returns some values to the outer 
SELECT.  This leaves you with the outer select:

SELECT (13, 3, 94) FROM t2

That doesn’t tell me what you’re trying to do.

Simon.
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Unexpected 'no such column' with expression in subquery ORDER BY

2016-12-18 Thread Stephen Chrzanowski
Your inner query only deals with what I've left in the quote below.  Z
doesn't exist to the inner query.

On Sun, Dec 18, 2016 at 8:57 AM, Keith Maxwell 
wrote:

> I've read the documentation[1] a few times and I don't understand why I
> get:
> CREATE TABLE t1(x INTEGER, y INTEGER);
> SELECT (SELECT y FROM t1 ORDER BY abs(x - z) LIMIT 1) FROM t2;
>
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Unexpected 'no such column' with expression in subquery ORDER BY

2016-12-18 Thread Keith Maxwell
Simon, Stephen thank you for trying to help.

I'm afraid I don't follow Simon. z is a column in t2. The sub-select
uses z in an expression in its order by clause: abs(x - z). What do
you mean by "your sub-select only refers to table t1"?

> SELECT (13, 3, 94) FROM t2

`LIMIT 1` on the sub-query means that it won't  return more than one
row; further z does exist to the inner query, as I've tried to show in
the related example below:

CREATE TABLE t1(x INTEGER, y INTEGER);
INSERT INTO t1(x, y) VALUES(2, 1), (3, 2), (6, 4);
CREATE TABLE t2(z INTEGER);
INSERT INTO t2(z) VALUES(4);
SELECT (SELECT z FROM t1 LIMIT 1) FROM t2;
4
4

To try and explain what the query was written to do in English: I have
a list pairs of numbers x and y. I want to find the y corresponding to
the x that is closest to each value of z.  There are plenty of
workarounds that I can use, but to me the query as written is valid,
and I don't understand why I get "no such column".  I can try and
clean up a more real life example, but I think that makes it harder to
follow by adding in date functions.

Thanks for your help.

Kind Regards

Keith Maxwell


On 18 December 2016 at 15:52, Stephen Chrzanowski  wrote:
> Your inner query only deals with what I've left in the quote below.  Z
> doesn't exist to the inner query.
>
> On Sun, Dec 18, 2016 at 8:57 AM, Keith Maxwell 
> wrote:
>
>> I've read the documentation[1] a few times and I don't understand why I
>> get:
>> CREATE TABLE t1(x INTEGER, y INTEGER);
>> SELECT (SELECT y FROM t1 ORDER BY abs(x - z) LIMIT 1) FROM t2;
>>
> ___
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Unexpected 'no such column' with expression in subquery ORDER BY

2016-12-18 Thread Simon Slavin

On 18 Dec 2016, at 6:13pm, Keith Maxwell  wrote:

> I'm afraid I don't follow Simon. z is a column in t2. The sub-select
> uses z in an expression in its order by clause: abs(x - z). What do
> you mean by "your sub-select only refers to table t1"?

Then perhaps instead of

>  SELECT (SELECT y FROM t1 ORDER BY abs(x - z) LIMIT 1) FROM t2;

You want to change which one is the sub-select:

SELECT y FROM t1 ORDER BY abs(x - (SELECT z FROM t2)) LIMIT 1;

Simon.
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Unexpected 'no such column' with expression in subquery ORDER BY

2016-12-18 Thread Keith Maxwell
Simon

Thanks again, maybe I didn't ask the question in the best way:  why
with the query below do I get "Error: no such column: z"?

SELECT (SELECT y FROM t1 ORDER BY abs(x - z) LIMIT 1) FROM t2;

There are workarounds or similar queries that produce the answer (an
example is below). I posted because I want to understand the error
message, or alternatively highlight the issue if the documentation
could be clearer or there is a bug.

SELECT (SELECT y FROM (SELECT abs(x - z), y FROM t1 ORDER BY 1 LIMIT
1)) FROM t2;

Thank you but I don't immediately see how making the change you
suggest helps. I appreciate that in my example, which I've probably
over-simplified, there is only one value of z.   In the more
complicated real life example there are lots of values of z so I can't
have `LIMIT 1` on the outer query.

I appreciate your help!

Kind Regards

Keith Maxwell

On 18 December 2016 at 18:20, Simon Slavin  wrote:
>
> On 18 Dec 2016, at 6:13pm, Keith Maxwell  wrote:
>
>> I'm afraid I don't follow Simon. z is a column in t2. The sub-select
>> uses z in an expression in its order by clause: abs(x - z). What do
>> you mean by "your sub-select only refers to table t1"?
>
> Then perhaps instead of
>
>>  SELECT (SELECT y FROM t1 ORDER BY abs(x - z) LIMIT 1) FROM t2;
>
> You want to change which one is the sub-select:
>
> SELECT y FROM t1 ORDER BY abs(x - (SELECT z FROM t2)) LIMIT 1;
>
> Simon.
> ___
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Unexpected 'no such column' with expression in subquery ORDER BY

2016-12-18 Thread Stephen Chrzanowski
As stated, the Z does not exist to the inner query.  The [ SELECT y FROM t1
ORDER BY abs(x - z) LIMIT 1 ] has no reference to what Z means.  T2 may
have it, but the inner query has no regards for the outer query.

On Sun, Dec 18, 2016 at 1:41 PM, Keith Maxwell 
wrote:

> Simon
>
> Thanks again, maybe I didn't ask the question in the best way:  why
> with the query below do I get "Error: no such column: z"?
>
> SELECT (SELECT y FROM t1 ORDER BY abs(x - z) LIMIT 1) FROM t2;
>
> There are workarounds or similar queries that produce the answer (an
> example is below). I posted because I want to understand the error
> message, or alternatively highlight the issue if the documentation
> could be clearer or there is a bug.
>
> SELECT (SELECT y FROM (SELECT abs(x - z), y FROM t1 ORDER BY 1 LIMIT
> 1)) FROM t2;
>
> Thank you but I don't immediately see how making the change you
> suggest helps. I appreciate that in my example, which I've probably
> over-simplified, there is only one value of z.   In the more
> complicated real life example there are lots of values of z so I can't
> have `LIMIT 1` on the outer query.
>
> I appreciate your help!
>
> Kind Regards
>
> Keith Maxwell
>
> On 18 December 2016 at 18:20, Simon Slavin  wrote:
> >
> > On 18 Dec 2016, at 6:13pm, Keith Maxwell 
> wrote:
> >
> >> I'm afraid I don't follow Simon. z is a column in t2. The sub-select
> >> uses z in an expression in its order by clause: abs(x - z). What do
> >> you mean by "your sub-select only refers to table t1"?
> >
> > Then perhaps instead of
> >
> >>  SELECT (SELECT y FROM t1 ORDER BY abs(x - z) LIMIT 1) FROM t2;
> >
> > You want to change which one is the sub-select:
> >
> > SELECT y FROM t1 ORDER BY abs(x - (SELECT z FROM t2)) LIMIT 1;
> >
> > Simon.
> > ___
> > sqlite-users mailing list
> > sqlite-users@mailinglists.sqlite.org
> > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> ___
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Unexpected 'no such column' with expression in subquery ORDER BY

2016-12-18 Thread Simon Slavin

On 18 Dec 2016, at 6:41pm, Keith Maxwell  wrote:

> Thanks again, maybe I didn't ask the question in the best way:  why
> with the query below do I get "Error: no such column: z"?
> 
> SELECT (SELECT y FROM t1 ORDER BY abs(x - z) LIMIT 1) FROM t2;

Because the inner SELECT does not have access to the details from the outer 
SELECT.  It does not know what 'z' is.  None of the tables in the inner SELECT 
have a column called 'z'.

This works:

SELECT y FROM t1 ORDER BY abs(x - (SELECT z FROM t2)) LIMIT 1;

though I do not know if it does what you want it to do.

Simon.
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Unexpected 'no such column' with expression in subquery ORDER BY

2016-12-18 Thread Keith Maxwell
Simon, Stephen

Thank again.  Did you try the other queries I've included? I've tried
to include two that show sub-queries using  z from the main query.

The simplest one (not a useful query, just illustrates a sub-query using z):

sqlite> SELECT (SELECT z FROM t1 LIMIT 1) FROM t2;
4

And the workaround that produces the answer:

sqlite> SELECT (SELECT y FROM (SELECT abs(x - z), y FROM t1 ORDER BY 1
LIMIT 1)) FROM t2;
2

I can't reconcile what you're saying about z in the sub-query with
what I see from the results above.

A subtle point that might be getting lost is that I can use z
elsewhere in the sub-query, just not in its `ORDER BY` clause.

I appreciate your continued help.

Kind Regards

Keith

On 18 December 2016 at 18:51, Simon Slavin  wrote:
>
> On 18 Dec 2016, at 6:41pm, Keith Maxwell  wrote:
>
>> Thanks again, maybe I didn't ask the question in the best way:  why
>> with the query below do I get "Error: no such column: z"?
>>
>> SELECT (SELECT y FROM t1 ORDER BY abs(x - z) LIMIT 1) FROM t2;
>
> Because the inner SELECT does not have access to the details from the outer 
> SELECT.  It does not know what 'z' is.  None of the tables in the inner 
> SELECT have a column called 'z'.
>
> This works:
>
> SELECT y FROM t1 ORDER BY abs(x - (SELECT z FROM t2)) LIMIT 1;
>
> though I do not know if it does what you want it to do.
>
> Simon.
> ___
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Unexpected 'no such column' with expression in subquery ORDER BY

2016-12-18 Thread Keith Medcalf

Correlated (outer) columns are not permitted in the ORDER BY clause -- only 
items from the SELECT list (or from the directly selected tables).  Normally in 
a correlated subquery the outer columns are only (designed to be) used in the 
WHERE clause of the correlated subquery, although they may be accessed in the 
SELECT list.

In other words, the SELECT ... FROM ... ORDER BY  will work because you are sorting the result-set by data contained 
within the result set of the subquery.

I have no idea what the standard has to say about the usage of an outer column 
in a correlated subquery order by clause however.

> -Original Message-
> From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org]
> On Behalf Of Keith Maxwell
> Sent: Sunday, 18 December, 2016 12:14
> To: SQLite mailing list
> Subject: Re: [sqlite] Unexpected 'no such column' with expression in
> subquery ORDER BY
> 
> Simon, Stephen
> 
> Thank again.  Did you try the other queries I've included? I've tried
> to include two that show sub-queries using  z from the main query.
> 
> The simplest one (not a useful query, just illustrates a sub-query using
> z):
> 
> sqlite> SELECT (SELECT z FROM t1 LIMIT 1) FROM t2;
> 4
> 
> And the workaround that produces the answer:
> 
> sqlite> SELECT (SELECT y FROM (SELECT abs(x - z), y FROM t1 ORDER BY 1
> LIMIT 1)) FROM t2;
> 2
> 
> I can't reconcile what you're saying about z in the sub-query with
> what I see from the results above.
> 
> A subtle point that might be getting lost is that I can use z
> elsewhere in the sub-query, just not in its `ORDER BY` clause.
> 
> I appreciate your continued help.
> 
> Kind Regards
> 
> Keith
> 
> On 18 December 2016 at 18:51, Simon Slavin  wrote:
> >
> > On 18 Dec 2016, at 6:41pm, Keith Maxwell 
> wrote:
> >
> >> Thanks again, maybe I didn't ask the question in the best way:  why
> >> with the query below do I get "Error: no such column: z"?
> >>
> >> SELECT (SELECT y FROM t1 ORDER BY abs(x - z) LIMIT 1) FROM t2;
> >
> > Because the inner SELECT does not have access to the details from the
> outer SELECT.  It does not know what 'z' is.  None of the tables in the
> inner SELECT have a column called 'z'.
> >
> > This works:
> >
> > SELECT y FROM t1 ORDER BY abs(x - (SELECT z FROM t2)) LIMIT 1;
> >
> > though I do not know if it does what you want it to do.
> >
> > Simon.
> > ___
> > sqlite-users mailing list
> > sqlite-users@mailinglists.sqlite.org
> > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> ___
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Unexpected 'no such column' with expression in subquery ORDER BY

2016-12-18 Thread Keith Maxwell
Keith

Brilliant! Thank you.

> Correlated (outer) columns are not permitted in the ORDER BY clause

At least I've learnt a new term [1]. Reading the documentation again
[2], I think a
change to the paragraph below would make this clearer:

3. Otherwise, if the ORDER BY expression is any other expression, it is
evaluated and the returned value used to order the output rows. If the SELECT
statement is a simple SELECT, then an ORDER BY may contain any arbitrary
expressions. However, if the SELECT is a compound SELECT, then ORDER BY
expressions that are not aliases to output columns must be exactly the same as
an expression used as an output column.

Maybe add a sentence: "If the SELECT is a correlated inner subquery then the
ORDER BY expression may not include columns from the outer query."

I'm also not sure if it would help to drop the word "any" from "any arbitrary
expressions"?

I'm afraid I didn't get very far trying to look up a standard.

I appreciate your help! Thanks again.

Kind Regards

Keith Maxwell

[1] https://en.wikipedia.org/wiki/Correlated_subquery
[2] https://www.sqlite.org/lang_select.html#order-by
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


[sqlite] Unregister UDF, created with sqlite3_create_function_v2

2016-12-18 Thread Bart Smissaert
Using the latest SQLite from VB6 and trying to unregister a UDF, created
with sqlite3_create_function_v2.
This registration works fine and the UDF's work fine.
Now I am trying to unregister this UDF and the only hint how to do this
that I could find
was in the documentation of sqlite3_create_function_v2:

> To delete an existing SQL function or aggregate, pass NULL pointers for
all three function callbacks.

I have tried this in VB6 like this:

   lRetVal = sqlite3_create_function_v2(ByVal lDBHdl, _
ByVal
cConn.UTF8BytesPointerFromUTF16String(strFunctionName), _
ByVal 0, _
ByVal 0, _
ByVal 0, _
ByVal 0, _
ByVal 0, _
ByVal 0, _
ByVal 0)

This seems to work in that lRetVal is zero, but I can still use the UDF in
SQL.
I know I could close the connection and re-register the remaining UDF's but
that has drawbacks
and seems unnecessary.

Any suggestions how to do this?


RBS
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Weird chars inserted

2016-12-18 Thread Jean-Christophe Deschamps

Igor,


On 12/18/2016 7:17 AM, Jean-Christophe Deschamps wrote:

Since your DB is UTF-16LE encoded, you shouldn't convert your strings to
UTF8.



int nRet= sqlite3_exec(m_hDB, szSQL, NULL, 0, &pErrMsg);



alone should work fine.


No it should not. The encoding of the database is irrelevant here: 
sqlite3_exec still expects a UTF-8 encoded string.


Oops, of course that's it. I'm so used to have this kind of mistake 
reported about _SQLite3_Exec() using the wrapper that I use and support 
that I didn't realize the OP was using the bare SQLite API.


___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


[sqlite] Weird chars inserted

2016-12-18 Thread Kevin
Hi Martin,

I had a go using a terminal session, with default encoding UTF-8.

Try using the hex( ) and unicode( ) functions to check what is actually
stored in the sqlite table.

I put a couple of rows at the end of an existing simple table

kevin@kevin-Aspire-V5-571G:~$ sqlite3 /home/kevin/dir_md5sum_db.sqlite
SQLite version 3.15.2 2016-11-28 19:13:37
Enter ".help" for usage hints.
sqlite> SELECT dir_name, hex(dir_name), dir_md5sum, hex(dir_md5sum),
unicode(dir_md5sum)  FROM dir_md5sum 
   ...> where rowid >= 194576;
194576|kev|6B6576|í|C3AD|237
194577|kev2|6B657632|�|ED|65533
sqlite> .quit
kevin@kevin-Aspire-V5-571G:~$ 



I tried changing the terminal session to UTF-16, but I ended up with a
mess of Chinese characters. 






the � is a place marker inserted by the program that displays on your
screen for a character the program doesn't recognize. 

Check http://www.fileformat.info/info/unicode/char/00ed/index.htm

as a reference.

I use Linux (Xubuntu)


regs,

Kev


From: "Ariel M. Martin" 
To: "   sqlite-users@mailinglists.sqlite.org"

Subject: [sqlite] Weird chars inserted
Message-ID: <835952.64146...@smtp113.mail.ne1.yahoo.com>
Content-Type: text/plain; charset="utf-8"

Hi people. I need some help I’m lost here.
I’m writing an application using SQLite and whenever I insert Spanish
characters
I get this kind of strings:
Mart�n (where it should read ‘Martín’)

Ok, so if I open my database with SQLiteManager (the Firefox addin) my
strings look
weird like that. But SQLiteManager is able to insert and display any
string correctly.
And any string inserted by SQLiteManager displays all right in my app
as well.

So I must be doing something wrong when I insert the strings. This is
my code:

Note: szSQL is the wchar-string my app uses

char szAux[2048];
ZeroMemory(szAux, 2048);
WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, szSQL,
wcslen(szSQL), szAux, 2048, NULL, 0);

int nRet= sqlite3_exec(m_hDB, szAux, NULL, 0, &pErrMsg);


SQLiteManager tells me that my db is utf-16le. Im using vs2015 in a
Windows10 64bit machine.

I’d appreciate any help.
Thanks in advance!


Ariel M. Martin

___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Weird chars inserted

2016-12-18 Thread Keith Medcalf

Inquiring minds want to know how a selection of 5 values resulted in a result 
list of 6 values ...

> -Original Message-
> From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org]
> On Behalf Of Kevin
> Sent: Sunday, 18 December, 2016 17:25
> To: Ariel M. Martin
> Cc: sqlite mailing list
> Subject: [sqlite] Weird chars inserted
> 
> Hi Martin,
> 
> I had a go using a terminal session, with default encoding UTF-8.
> 
> Try using the hex( ) and unicode( ) functions to check what is actually
> stored in the sqlite table.
> 
> I put a couple of rows at the end of an existing simple table
> 
> kevin@kevin-Aspire-V5-571G:~$ sqlite3 /home/kevin/dir_md5sum_db.sqlite
> SQLite version 3.15.2 2016-11-28 19:13:37
> Enter ".help" for usage hints.
> sqlite> SELECT dir_name, hex(dir_name), dir_md5sum, hex(dir_md5sum),
> unicode(dir_md5sum)  FROM dir_md5sum
>    ...> where rowid >= 194576;
> 194576|kev|6B6576|í|C3AD|237
> 194577|kev2|6B657632|�|ED|65533
> sqlite> .quit
> kevin@kevin-Aspire-V5-571G:~$
> 
> 
> 
> I tried changing the terminal session to UTF-16, but I ended up with a
> mess of Chinese characters.
> 
> 
> 
> 
> 
> 
> the � is a place marker inserted by the program that displays on your
> screen for a character the program doesn't recognize.
> 
> Check http://www.fileformat.info/info/unicode/char/00ed/index.htm
> 
> as a reference.
> 
> I use Linux (Xubuntu)
> 
> 
> regs,
> 
> Kev
> 
> 
> From: "Ariel M. Martin" 
> To: "   sqlite-users@mailinglists.sqlite.org"
> 
> Subject: [sqlite] Weird chars inserted
> Message-ID: <835952.64146...@smtp113.mail.ne1.yahoo.com>
> Content-Type: text/plain; charset="utf-8"
> 
> Hi people. I need some help I’m lost here.
> I’m writing an application using SQLite and whenever I insert Spanish
> characters
> I get this kind of strings:
> Mart�n (where it should read ‘Martín’)
> 
> Ok, so if I open my database with SQLiteManager (the Firefox addin) my
> strings look
> weird like that. But SQLiteManager is able to insert and display any
> string correctly.
> And any string inserted by SQLiteManager displays all right in my app
> as well.
> 
> So I must be doing something wrong when I insert the strings. This is
> my code:
> 
> Note: szSQL is the wchar-string my app uses
> 
> char szAux[2048];
> ZeroMemory(szAux, 2048);
> WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, szSQL,
> wcslen(szSQL), szAux, 2048, NULL, 0);
> 
> int nRet= sqlite3_exec(m_hDB, szAux, NULL, 0, &pErrMsg);
> 
> 
> SQLiteManager tells me that my db is utf-16le. Im using vs2015 in a
> Windows10 64bit machine.
> 
> I’d appreciate any help.
> Thanks in advance!
> 
> 
> Ariel M. Martin
> 
> ___
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Weird chars inserted

2016-12-18 Thread Rowan Worth
On 19 December 2016 at 08:24, Kevin  wrote:

> Hi Martin,
>
> I had a go using a terminal session, with default encoding UTF-8.
>
> Try using the hex( ) and unicode( ) functions to check what is actually
> stored in the sqlite table.
>
> I put a couple of rows at the end of an existing simple table
>
> kevin@kevin-Aspire-V5-571G:~$ sqlite3 /home/kevin/dir_md5sum_db.sqlite
> SQLite version 3.15.2 2016-11-28 19:13:37
> Enter ".help" for usage hints.
> sqlite> SELECT dir_name, hex(dir_name), dir_md5sum, hex(dir_md5sum),
> unicode(dir_md5sum)  FROM dir_md5sum
>...> where rowid >= 194576;
> 194576|kev|6B6576|í|C3AD|237
> 194577|kev2|6B657632|�|ED|65533
> sqlite> .quit
> kevin@kevin-Aspire-V5-571G:~$
>

Hi Kevin,

The problem here lies in whatever inserted these rows. sqlite just stores
what it is given - it is up to the application to take care of encoding
issues.

In this case the "kev" row has been inserted using utf-8 encoding, so when
you retrieve this value sqlite emits the bytes 0xC3 0xAD (exactly as they
were stored), which your terminal interprets as utf-8 and renders the
character í.

The "kev2" row however is not utf-8 encoded. The dir_md5sum column contains
a single byte 0xED, which is not valid utf-8 (the encoding specifies that
when the highest bit is on, there is more information about the current
character in the next byte).

When you retrieve this value sqlite emits the byte 0xED (exactly as it was
stored). Your terminal tries to interpret this as utf-8, but since it is
not valid it instead inserts a unicode replacement character (U+FFFD).
Sqlite3's unicode() function makes the same U+FFFD replacement when
encountering an invalid encoding which is where the 65533 comes from.

-Rowan
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Unregister UDF, created with sqlite3_create_function_v2

2016-12-18 Thread Dan Kennedy

On 12/19/2016 03:32 AM, Bart Smissaert wrote:

Using the latest SQLite from VB6 and trying to unregister a UDF, created
with sqlite3_create_function_v2.
This registration works fine and the UDF's work fine.
Now I am trying to unregister this UDF and the only hint how to do this
that I could find
was in the documentation of sqlite3_create_function_v2:


To delete an existing SQL function or aggregate, pass NULL pointers for

all three function callbacks.

I have tried this in VB6 like this:

lRetVal = sqlite3_create_function_v2(ByVal lDBHdl, _
 ByVal
cConn.UTF8BytesPointerFromUTF16String(strFunctionName), _
 ByVal 0, _
 ByVal 0, _
 ByVal 0, _
 ByVal 0, _
 ByVal 0, _
 ByVal 0, _
 ByVal 0)

This seems to work in that lRetVal is zero, but I can still use the UDF in
SQL.
I know I could close the connection and re-register the remaining UDF's but
that has drawbacks
and seems unnecessary.

Any suggestions how to do this?



Were the encoding and number-of-arguments (the third and fourth) 
arguments passed to the two invocations of sqlite3_create_function_v2() 
the same?


Dan.






RBS
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Unregister UDF, created with sqlite3_create_function_v2

2016-12-18 Thread Bart Smissaert
Thanks, that was it.
I had done the encoding the same (but also tried 0), but the arguments were
always set at 0. Now with the arguments the same as at registration it
works fine.
Maybe this should be added to the documentation of create_function.

RBS

On Mon, Dec 19, 2016 at 7:03 AM, Dan Kennedy  wrote:

> On 12/19/2016 03:32 AM, Bart Smissaert wrote:
>
>> Using the latest SQLite from VB6 and trying to unregister a UDF, created
>> with sqlite3_create_function_v2.
>> This registration works fine and the UDF's work fine.
>> Now I am trying to unregister this UDF and the only hint how to do this
>> that I could find
>> was in the documentation of sqlite3_create_function_v2:
>>
>> To delete an existing SQL function or aggregate, pass NULL pointers for
>>>
>> all three function callbacks.
>>
>> I have tried this in VB6 like this:
>>
>> lRetVal = sqlite3_create_function_v2(ByVal lDBHdl, _
>>  ByVal
>> cConn.UTF8BytesPointerFromUTF16String(strFunctionName), _
>>  ByVal 0, _
>>  ByVal 0, _
>>  ByVal 0, _
>>  ByVal 0, _
>>  ByVal 0, _
>>  ByVal 0, _
>>  ByVal 0)
>>
>> This seems to work in that lRetVal is zero, but I can still use the UDF in
>> SQL.
>> I know I could close the connection and re-register the remaining UDF's
>> but
>> that has drawbacks
>> and seems unnecessary.
>>
>> Any suggestions how to do this?
>>
>
>
> Were the encoding and number-of-arguments (the third and fourth) arguments
> passed to the two invocations of sqlite3_create_function_v2() the same?
>
> Dan.
>
>
>
>
>>
>> RBS
>> ___
>> sqlite-users mailing list
>> sqlite-users@mailinglists.sqlite.org
>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>>
>
>
> ___
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users