{"size": 2157, "ext": "scrbl", "max_stars_repo_path": "plisqin-doc/scribblings/for-developers.scrbl", "max_stars_repo_name": "default-kramer/plisqin", "max_stars_repo_stars_event_min_datetime": "2018-11-26T21:09:05.000Z", "max_stars_repo_stars_event_max_datetime": "2021-12-22T22:18:39.000Z", "max_issues_repo_path": "plisqin-doc/scribblings/for-developers.scrbl", "max_issues_repo_name": "default-kramer/plisqin", "max_issues_repo_issues_event_min_datetime": "2019-06-20T16:05:30.000Z", "max_issues_repo_issues_event_max_datetime": "2020-07-26T01:14:22.000Z", "max_forks_repo_path": "plisqin-doc/scribblings/for-developers.scrbl", "max_forks_repo_name": "default-kramer/plisqin", "max_forks_repo_forks_event_min_datetime": null, "max_forks_repo_forks_event_max_datetime": null}
{"max_stars_count": 9, "max_issues_count": 12, "max_forks_count": null, "avg_line_length": 44.9375, "max_line_length": 95, "alphanum_fraction": 0.7399165508}
#lang scribble/manual

@title{For Developers}
This documentation is not written for a user of Plisqin, but you
might find something useful anyway.

@section{Needed for 0.2}
@itemlist[
 @item{Remove number? from sql-token? - need param or val.}
 @item{raw-sql NEEDS to look different than a regular string in error messages}
 @item{and, or, not}
 @item{the literal rewrites (or syntax parameters) of 'asc 'desc 'null}
 @item{something for sql-null}
 @item{Lots of testing needed - do rebuild views / SPs}
 @item{Lots of missing documentation}
 @item{Document the 3 modes (offline SQL gen, compile-time gen, runtime-gen (eager or lazy)).}
 ]

@section{Nice to have for 0.2}
@itemlist[
 @item{Compile-time SQL generation for Racket programs}
 @item{as-name inference}
 @item{via! and maybe def/append! could maybe detect infinite recursion and other errors?}
 @item{Support for update and delete}
 @item{Overhaul query printing / that to-list stuff}
 @item{rename binding? to attached-join?}
 @item{Split core lib from extras, like the examples}
 ]

@section{What Else}
@itemlist[
 @item{What type system should Plisqin have? Dynamic, sure, but what about...}
 @item{Can @(racket (scalar x".Foo")) be used in addition? (A: Maybe?)}
 @item{Can @(racket (scalar x".Foo" #:typed-as 'decimal)) be used in addition? (A: Always.)}
 @item{Can @(racket (scalar x".Foo" #:typed-as 'varchar)) be used in addition? (A: Never.)}
 @item{If I integrate with Postgres/SQLite, could it detect the type errors
  after I translate the query to its native format?}
 @item{Would I want it to? Probably not... I can't imagine the semantics being similar enough.}
 @item{How should Plisqin handle NULL?}
 @item{Some aggregate operations have reasonable answers for empty grouped joins
  (specifically @(racket sum) and @(racket count) which should return 0.)
  But what about other aggregates? What is the average of an empty set?
  Force the programmer to specify what they want?}
 @item{Can I satisfy people who have never seen (or hate) Lisp without sacrificing power?}
 @item{Can Plisqin provide a uniform API for different databases?}]

@(include-section "design-notes.scrbl")
