Commit graph

89 commits

Author SHA1 Message Date
Yorhel
fbbaa23842 pg: Add date type & httpdate tests
...I was hoping not to have to implement the date type, because date
conversions suck, but it turns out manned.org actually needs it.
(Only to then convert it into a Unix timestamp again, hmm, maybe this
string conversion isn't useful at all?)
2025-02-24 11:54:37 +01:00
Yorhel
8595c4ba64 FU: HTTP date handling + fu->send_file 2025-02-24 11:12:01 +01:00
Yorhel
18e642290d Some fixes and framework docs 2025-02-23 14:05:43 +01:00
Yorhel
b2d676b1ed pg: Add query tracing & prepare/execute time measurements
What I'd really like, in addition to this, is a way to extract a query
from an $st object that can be run in the psql CLI. VNDB has a debugging
feature for that, but it's less trivial to make that work with binary
query parameters.
2025-02-22 15:15:16 +01:00
Yorhel
a5f9584b02 FU::Log: Add logger and basic integration with FU 2025-02-21 17:13:32 +01:00
Yorhel
6f1583ddad pg: timestamp(tz) types + more docs 2025-02-21 12:58:24 +01:00
Yorhel
8036b8f0bf SQL: Doc and test adjustments 2025-02-21 10:22:33 +01:00
Yorhel
145d086bea Add FU::SQL
Somewhat experimental, need to test this approach on a real site.
Looking pretty promising so far, though.
2025-02-20 15:45:55 +01:00
Yorhel
48d3fb86a5 FU: Revert integration with XMLWriter & import options; copyright stuff
Realized that, since html_() now returns a string, it's just as easy to
just pass that to fu->set_body(); no need for integration complexity.

Combined import options don't save much typing, not worth the overhead
either.
2025-02-20 08:46:03 +01:00
Yorhel
63f524622b bench: Re-run with more time + JSON::Tiny & XMLWriter benchmarks 2025-02-19 13:32:28 +01:00
Yorhel
9014e2900c Add FU::XMLWriter
And remove UTF-8 check in JSON writer. It honestly feels kind of silly
to do that validation there while I've never done similar validations in
any other output routines - including this XML writer.

FU::XMLWriter is a copy of TUWF::XMLXS with a bunch of improvements
applied: now uses refcounts to determine the current output instance,
auto-generates XS functions and has faster escaped string output -
inspired by the JSON writer.

TODO:
- Integrate into FU
- Do something with bool attribute values
- Benchmarks
- Should $content be optional for all tags? The reason they weren't in
  TUWF::XMLXS is because TUWF::XML supports opening tags without closing
  them, but that idea turned out to suck and isn't supported anymore.

This is hopefully the last XS module for the FU framework. The only C
code being written now should be bug fixes and extending FU::Pg with
some planned features. Already ended up with more C than I had
planned...
2025-02-19 12:01:24 +01:00
Yorhel
67e6d99f01 Add query string encoding & decoding functions 2025-02-18 14:08:23 +01:00
Yorhel
90cfd66069 FU: Some FastCGI fixes; FU::Util: utf8_decode & URI escaping 2025-02-18 10:27:58 +01:00
Yorhel
3e84a4f4d3 FU: Implement --monitor, add some docs; FU::Util: add fdpass functions 2025-02-15 15:09:56 +01:00
Yorhel
d5401674f9 pg: Minor docs + tests 2025-02-13 08:50:40 +01:00
Yorhel
33fe0d98a8 pg: Module rename + more docs 2025-02-11 11:04:03 +01:00
Yorhel
7f1c48e0cf pg: Add send/recv support for a few more easy types 2025-02-08 14:03:35 +01:00
Yorhel
166744dd51 pg: Rework txn implementation + statement config API
I liked the Perl implementation of transactions, but managing state
between Perl and C is a bit cumbersome, so I've moved the whole thing
into C.

Also added a few statement configuration methods that currently don't do
anything yet.
2025-02-07 18:30:36 +01:00
Yorhel
7c8473533d pg: More verbose error traces
Partly because some errors currently appeared to come from within FU::PG
itself, which is useless, and partly because it's common to wrap
database access methods, while that's exactly the kind of operation
where you *really* want to know where the error originated from.

(Source: too much time wasted debugging VNDB errors)
2025-02-07 11:06:56 +01:00
Yorhel
96aee880ce pg: ->disconnect() and docs 2025-02-07 10:49:47 +01:00
Yorhel
171afc0268 pg: Add transaction & subtransaction support
Was expecting the implementation of this to get overly complicated and
brittle, but using a counter-based cookie and doing parts of it in Perl
made it pretty easy actually.  Pretty happy with how this turned out so
far.

TODO: documentation -.-
2025-02-06 19:12:52 +01:00
Yorhel
9d5905e3b4 pg: Add a few result fetching methods
I'm not sure if these are free from memory leaks, need to find a way to
test for that.
2025-02-06 13:38:07 +01:00
Yorhel
711300b227 pg: Statement execution + better error reporting 2025-02-06 09:05:05 +01:00
Yorhel
922f19e39b pg: Some initial documentation 2025-02-05 14:18:01 +01:00
Yorhel
c51b5f3598 pg: Better error reporting + basic exec() method 2025-02-03 16:59:18 +01:00
Yorhel
b242176071 pg: Adventures in writing a new postgresql client 2025-02-02 16:22:15 +01:00
Yorhel
13eaeb1d4a jsonparse: Add max_depth, max_size and offset options
This completes all the functionality that I wanted from the JSON parser.
2025-02-01 11:01:49 +01:00
Yorhel
abfbba3c10 Add some tests and move some docs 2025-02-01 07:00:09 +01:00
Yorhel
ebe84167e7 jsonparse: A bunch of performance improvements
Turrns out JSON::XS had some pretty good ideas that I could borrow.
2025-01-31 18:42:21 +01:00
Yorhel
ca8d1b72be bench: Add JSON parsing benchmarks + nicer formatting
This shows I got some optimizing to do. I was expecting integer parsing
to be slower, though, but it looks like it can compete with JSON::XS's
specialized small-int parsing code anyway.
2025-01-31 10:36:06 +01:00
Yorhel
7cdc02e399 jsonparse: Add basic JSON parser
Some TODO's left and this needs benchmarking.
2025-01-31 07:29:06 +01:00
Yorhel
aebe5a93dc jsonfmt: Add pretty option
That completes the json_format() function for now. At least, it now does
everything I had planned for it.

Ended up at a bit over 300 LOC. That's larger than I had expected, but
still alright.
2025-01-30 09:11:34 +01:00
Yorhel
1a0fb03205 jsonfmt: Add canonical option
Not as bad as I had expected it to be; managed to keep the
implementation a little bit simpler and cleaner than JSON::XS.
2025-01-29 18:46:27 +01:00
Yorhel
163a60b4ba jsonfmt: Add max_size and max_depth options 2025-01-29 15:05:48 +01:00
Yorhel
8ef2a724d1 jsonfmt: Move arg parsing into XS
Going to need a way to pass arguments into the XS function anyway, so
might as well do the entire arg parsing step in XS while we're at it.
Provides a significant speedup for tiny inputs as well, but I don't find
that too interesting.
2025-01-29 11:42:15 +01:00
Yorhel
3ae9347ad2 bench: Cache benchmark results + better re-run filtering 2025-01-29 10:19:51 +01:00
Yorhel
9c8ce3f782 Add benchmarking tool + improve integer formatting performance
Typical priorities: make it fast before fixing all the bugs. *shrug*
2025-01-28 15:02:32 +01:00
Yorhel
c16a9fa493 Add initial JSON formatter
It works and can format all "plain" Perl data, but has a few known bugs
and limitations that still need to be worked out.

It's about 8x smaller than JSON::XS's encoder and *much* smaller than
Cpanel::JSON::XS, but this is just a first attempt, it'll grow.
2025-01-28 09:33:29 +01:00
Yorhel
9c80f2465a Init 2025-01-26 15:32:47 +01:00