all repos — litestore @ e25b0330e0df0142e2269ee332b687e7bcb7ef57

A minimalist nosql document store.

Improve content-types management; implemented pack/unpack.
h3rald h3rald@h3rald.com
Sun, 18 Jan 2015 15:29:33 +0100
commit

e25b0330e0df0142e2269ee332b687e7bcb7ef57

parent

a3dd540952bc22fe0e0662d0a97e091a39896b61

6 files changed, 78 insertions(+), 50 deletions(-)

jump to
A contenttypes.json

@@ -0,0 +1,2 @@

+ +[{".123": "application\/vnd.lotus-1-2-3"}, {".3dml": "text\/vnd.in3d.3dml"}, {".3g2": "video\/3gpp2"}, {".3gp": "video\/3gpp"}, {".a": "application\/octet-stream"}, {".aab": "application\/x-authorware-bin"}, {".aac": "audio\/x-aac"}, {".aam": "application\/x-authorware-map"}, {".aas": "application\/x-authorware-seg"}, {".abw": "application\/x-abiword"}, {".acc": "application\/vnd.americandynamics.acc"}, {".ace": "application\/x-ace-compressed"}, {".acu": "application\/vnd.acucobol"}, {".acutc": "application\/vnd.acucorp"}, {".adp": "audio\/adpcm"}, {".aep": "application\/vnd.audiograph"}, {".afm": "application\/x-font-type1"}, {".afp": "application\/vnd.ibm.modcap"}, {".ai": "application\/postscript"}, {".aif": "audio\/x-aiff"}, {".aifc": "audio\/x-aiff"}, {".aiff": "audio\/x-aiff"}, {".air": "application\/vnd.adobe.air-application-installer-package+zip"}, {".ami": "application\/vnd.amiga.ami"}, {".apk": "application\/vnd.android.package-archive"}, {".application": "application\/x-ms-application"}, {".apr": "application\/vnd.lotus-approach"}, {".asc": "application\/pgp-signature"}, {".asf": "video\/x-ms-asf"}, {".asm": "text\/x-asm"}, {".aso": "application\/vnd.accpac.simply.aso"}, {".asx": "video\/x-ms-asf"}, {".atc": "application\/vnd.acucorp"}, {".atom": "application\/atom+xml"}, {".atomcat": "application\/atomcat+xml"}, {".atomsvc": "application\/atomsvc+xml"}, {".atx": "application\/vnd.antix.game-component"}, {".au": "audio\/basic"}, {".avi": "video\/x-msvideo"}, {".aw": "application\/applixware"}, {".azf": "application\/vnd.airzip.filesecure.azf"}, {".azs": "application\/vnd.airzip.filesecure.azs"}, {".azw": "application\/vnd.amazon.ebook"}, {".bat": "application\/x-msdownload"}, {".bcpio": "application\/x-bcpio"}, {".bdf": "application\/x-font-bdf"}, {".bdm": "application\/vnd.syncml.dm+wbxml"}, {".bh2": "application\/vnd.fujitsu.oasysprs"}, {".bin": "application\/octet-stream"}, {".bmi": "application\/vnd.bmi"}, {".bmp": "image\/bmp"}, {".book": "application\/vnd.framemaker"}, {".box": "application\/vnd.previewsystems.box"}, {".boz": "application\/x-bzip2"}, {".bpk": "application\/octet-stream"}, {".btif": "image\/prs.btif"}, {".bz": "application\/x-bzip"}, {".bz2": "application\/x-bzip2"}, {".c": "text\/x-c"}, {".c4d": "application\/vnd.clonk.c4group"}, {".c4f": "application\/vnd.clonk.c4group"}, {".c4g": "application\/vnd.clonk.c4group"}, {".c4p": "application\/vnd.clonk.c4group"}, {".c4u": "application\/vnd.clonk.c4group"}, {".cab": "application\/vnd.ms-cab-compressed"}, {".car": "application\/vnd.curl.car"}, {".cat": "application\/vnd.ms-pki.seccat"}, {".cc": "text\/x-c"}, {".cct": "application\/x-director"}, {".ccxml": "application\/ccxml+xml"}, {".cdbcmsg": "application\/vnd.contact.cmsg"}, {".cdf": "application\/x-netcdf"}, {".cdkey": "application\/vnd.mediastation.cdkey"}, {".cdx": "chemical\/x-cdx"}, {".cdxml": "application\/vnd.chemdraw+xml"}, {".cdy": "application\/vnd.cinderella"}, {".cer": "application\/pkix-cert"}, {".cgm": "image\/cgm"}, {".chat": "application\/x-chat"}, {".chm": "application\/vnd.ms-htmlhelp"}, {".chrt": "application\/vnd.kde.kchart"}, {".cif": "chemical\/x-cif"}, {".cii": "application\/vnd.anser-web-certificate-issue-initiation"}, {".cil": "application\/vnd.ms-artgalry"}, {".cla": "application\/vnd.claymore"}, {".class": "application\/java-vm"}, {".clkk": "application\/vnd.crick.clicker.keyboard"}, {".clkp": "application\/vnd.crick.clicker.palette"}, {".clkt": "application\/vnd.crick.clicker.template"}, {".clkw": "application\/vnd.crick.clicker.wordbank"}, {".clkx": "application\/vnd.crick.clicker"}, {".clp": "application\/x-msclip"}, {".cmc": "application\/vnd.cosmocaller"}, {".cmdf": "chemical\/x-cmdf"}, {".cml": "chemical\/x-cml"}, {".cmp": "application\/vnd.yellowriver-custom-menu"}, {".cmx": "image\/x-cmx"}, {".cod": "application\/vnd.rim.cod"}, {".com": "application\/x-msdownload"}, {".conf": "text\/plain"}, {".cpio": "application\/x-cpio"}, {".cpp": "text\/x-c"}, {".cpt": "application\/mac-compactpro"}, {".crd": "application\/x-mscardfile"}, {".crl": "application\/pkix-crl"}, {".crt": "application\/x-x509-ca-cert"}, {".csh": "application\/x-csh"}, {".csml": "chemical\/x-csml"}, {".csp": "application\/vnd.commonspace"}, {".css": "text\/css"}, {".cst": "application\/x-director"}, {".csv": "text\/csv"}, {".cu": "application\/cu-seeme"}, {".curl": "text\/vnd.curl"}, {".cww": "application\/prs.cww"}, {".cxt": "application\/x-director"}, {".cxx": "text\/x-c"}, {".daf": "application\/vnd.mobius.daf"}, {".dataless": "application\/vnd.fdsn.seed"}, {".davmount": "application\/davmount+xml"}, {".dcr": "application\/x-director"}, {".dcurl": "text\/vnd.curl.dcurl"}, {".dd2": "application\/vnd.oma.dd2+xml"}, {".ddd": "application\/vnd.fujixerox.ddd"}, {".deb": "application\/x-debian-package"}, {".def": "text\/plain"}, {".deploy": "application\/octet-stream"}, {".der": "application\/x-x509-ca-cert"}, {".dfac": "application\/vnd.dreamfactory"}, {".dic": "text\/x-c"}, {".diff": "text\/plain"}, {".dir": "application\/x-director"}, {".dis": "application\/vnd.mobius.dis"}, {".dist": "application\/octet-stream"}, {".distz": "application\/octet-stream"}, {".djv": "image\/vnd.djvu"}, {".djvu": "image\/vnd.djvu"}, {".dll": "application\/x-msdownload"}, {".dmg": "application\/octet-stream"}, {".dms": "application\/octet-stream"}, {".dna": "application\/vnd.dna"}, {".doc": "application\/msword"}, {".docm": "application\/vnd.ms-word.document.macroenabled.12"}, {".docx": "application\/vnd.openxmlformats-officedocument.wordprocessingml.document"}, {".dot": "application\/msword"}, {".dotm": "application\/vnd.ms-word.template.macroenabled.12"}, {".dotx": "application\/vnd.openxmlformats-officedocument.wordprocessingml.template"}, {".dp": "application\/vnd.osgi.dp"}, {".dpg": "application\/vnd.dpgraph"}, {".dsc": "text\/prs.lines.tag"}, {".dtb": "application\/x-dtbook+xml"}, {".dtd": "application\/xml-dtd"}, {".dts": "audio\/vnd.dts"}, {".dtshd": "audio\/vnd.dts.hd"}, {".dump": "application\/octet-stream"}, {".dvi": "application\/x-dvi"}, {".dwf": "model\/vnd.dwf"}, {".dwg": "image\/vnd.dwg"}, {".dxf": "image\/vnd.dxf"}, {".dxp": "application\/vnd.spotfire.dxp"}, {".dxr": "application\/x-director"}, {".ecelp4800": "audio\/vnd.nuera.ecelp4800"}, {".ecelp7470": "audio\/vnd.nuera.ecelp7470"}, {".ecelp9600": "audio\/vnd.nuera.ecelp9600"}, {".ecma": "application\/ecmascript"}, {".edm": "application\/vnd.novadigm.edm"}, {".edx": "application\/vnd.novadigm.edx"}, {".efif": "application\/vnd.picsel"}, {".ei6": "application\/vnd.pg.osasli"}, {".elc": "application\/octet-stream"}, {".eml": "message\/rfc822"}, {".emma": "application\/emma+xml"}, {".eol": "audio\/vnd.digital-winds"}, {".eot": "application\/vnd.ms-fontobject"}, {".eps": "application\/postscript"}, {".epub": "application\/epub+zip"}, {".es3": "application\/vnd.eszigno3+xml"}, {".esf": "application\/vnd.epson.esf"}, {".et3": "application\/vnd.eszigno3+xml"}, {".etx": "text\/x-setext"}, {".exe": "application\/x-msdownload"}, {".ext": "application\/vnd.novadigm.ext"}, {".ez": "application\/andrew-inset"}, {".ez2": "application\/vnd.ezpix-album"}, {".ez3": "application\/vnd.ezpix-package"}, {".f": "text\/x-fortran"}, {".f4v": "video\/x-f4v"}, {".f77": "text\/x-fortran"}, {".f90": "text\/x-fortran"}, {".fbs": "image\/vnd.fastbidsheet"}, {".fdf": "application\/vnd.fdf"}, {".fe_launch": "application\/vnd.denovo.fcselayout-link"}, {".fg5": "application\/vnd.fujitsu.oasysgp"}, {".fgd": "application\/x-director"}, {".fh": "image\/x-freehand"}, {".fh4": "image\/x-freehand"}, {".fh5": "image\/x-freehand"}, {".fh7": "image\/x-freehand"}, {".fhc": "image\/x-freehand"}, {".fig": "application\/x-xfig"}, {".fli": "video\/x-fli"}, {".flo": "application\/vnd.micrografx.flo"}, {".flv": "video\/x-flv"}, {".flw": "application\/vnd.kde.kivio"}, {".flx": "text\/vnd.fmi.flexstor"}, {".fly": "text\/vnd.fly"}, {".fm": "application\/vnd.framemaker"}, {".fnc": "application\/vnd.frogans.fnc"}, {".for": "text\/x-fortran"}, {".fpx": "image\/vnd.fpx"}, {".frame": "application\/vnd.framemaker"}, {".fsc": "application\/vnd.fsc.weblaunch"}, {".fst": "image\/vnd.fst"}, {".ftc": "application\/vnd.fluxtime.clip"}, {".fti": "application\/vnd.anser-web-funds-transfer-initiation"}, {".fvt": "video\/vnd.fvt"}, {".fzs": "application\/vnd.fuzzysheet"}, {".g3": "image\/g3fax"}, {".gac": "application\/vnd.groove-account"}, {".gdl": "model\/vnd.gdl"}, {".geo": "application\/vnd.dynageo"}, {".gex": "application\/vnd.geometry-explorer"}, {".ggb": "application\/vnd.geogebra.file"}, {".ggt": "application\/vnd.geogebra.tool"}, {".ghf": "application\/vnd.groove-help"}, {".gif": "image\/gif"}, {".gim": "application\/vnd.groove-identity-message"}, {".gmx": "application\/vnd.gmx"}, {".gnumeric": "application\/x-gnumeric"}, {".gph": "application\/vnd.flographit"}, {".gqf": "application\/vnd.grafeq"}, {".gqs": "application\/vnd.grafeq"}, {".gram": "application\/srgs"}, {".gre": "application\/vnd.geometry-explorer"}, {".grv": "application\/vnd.groove-injector"}, {".grxml": "application\/srgs+xml"}, {".gsf": "application\/x-font-ghostscript"}, {".gtar": "application\/x-gtar"}, {".gtm": "application\/vnd.groove-tool-message"}, {".gtw": "model\/vnd.gtw"}, {".gv": "text\/vnd.graphviz"}, {".gz": "application\/x-gzip"}, {".h": "text\/x-c"}, {".h261": "video\/h261"}, {".h263": "video\/h263"}, {".h264": "video\/h264"}, {".hbci": "application\/vnd.hbci"}, {".hdf": "application\/x-hdf"}, {".hh": "text\/x-c"}, {".hlp": "application\/winhlp"}, {".hpgl": "application\/vnd.hp-hpgl"}, {".hpid": "application\/vnd.hp-hpid"}, {".hps": "application\/vnd.hp-hps"}, {".hqx": "application\/mac-binhex40"}, {".htke": "application\/vnd.kenameaapp"}, {".htm": "text\/html"}, {".html": "text\/html"}, {".hvd": "application\/vnd.yamaha.hv-dic"}, {".hvp": "application\/vnd.yamaha.hv-voice"}, {".hvs": "application\/vnd.yamaha.hv-script"}, {".icc": "application\/vnd.iccprofile"}, {".ice": "x-conference\/x-cooltalk"}, {".icm": "application\/vnd.iccprofile"}, {".ico": "image\/x-icon"}, {".ics": "text\/calendar"}, {".ief": "image\/ief"}, {".ifb": "text\/calendar"}, {".ifm": "application\/vnd.shana.informed.formdata"}, {".iges": "model\/iges"}, {".igl": "application\/vnd.igloader"}, {".igs": "model\/iges"}, {".igx": "application\/vnd.micrografx.igx"}, {".iif": "application\/vnd.shana.informed.interchange"}, {".imp": "application\/vnd.accpac.simply.imp"}, {".ims": "application\/vnd.ms-ims"}, {".in": "text\/plain"}, {".ipk": "application\/vnd.shana.informed.package"}, {".irm": "application\/vnd.ibm.rights-management"}, {".irp": "application\/vnd.irepository.package+xml"}, {".iso": "application\/octet-stream"}, {".itp": "application\/vnd.shana.informed.formtemplate"}, {".ivp": "application\/vnd.immervision-ivp"}, {".ivu": "application\/vnd.immervision-ivu"}, {".jad": "text\/vnd.sun.j2me.app-descriptor"}, {".jam": "application\/vnd.jam"}, {".jar": "application\/java-archive"}, {".java": "text\/x-java-source"}, {".jisp": "application\/vnd.jisp"}, {".jlt": "application\/vnd.hp-jlyt"}, {".jnlp": "application\/x-java-jnlp-file"}, {".joda": "application\/vnd.joost.joda-archive"}, {".jpe": "image\/jpeg"}, {".jpeg": "image\/jpeg"}, {".jpg": "image\/jpeg"}, {".jpgm": "video\/jpm"}, {".jpgv": "video\/jpeg"}, {".jpm": "video\/jpm"}, {".js": "application\/javascript"}, {".json": "application\/json"}, {".kar": "audio\/midi"}, {".karbon": "application\/vnd.kde.karbon"}, {".kfo": "application\/vnd.kde.kformula"}, {".kia": "application\/vnd.kidspiration"}, {".kil": "application\/x-killustrator"}, {".kml": "application\/vnd.google-earth.kml+xml"}, {".kmz": "application\/vnd.google-earth.kmz"}, {".kne": "application\/vnd.kinar"}, {".knp": "application\/vnd.kinar"}, {".kon": "application\/vnd.kde.kontour"}, {".kpr": "application\/vnd.kde.kpresenter"}, {".kpt": "application\/vnd.kde.kpresenter"}, {".ksh": "text\/plain"}, {".ksp": "application\/vnd.kde.kspread"}, {".ktr": "application\/vnd.kahootz"}, {".ktz": "application\/vnd.kahootz"}, {".kwd": "application\/vnd.kde.kword"}, {".kwt": "application\/vnd.kde.kword"}, {".latex": "application\/x-latex"}, {".lbd": "application\/vnd.llamagraphics.life-balance.desktop"}, {".lbe": "application\/vnd.llamagraphics.life-balance.exchange+xml"}, {".les": "application\/vnd.hhe.lesson-player"}, {".lha": "application\/octet-stream"}, {".link66": "application\/vnd.route66.link66+xml"}, {".list": "text\/plain"}, {".list3820": "application\/vnd.ibm.modcap"}, {".listafp": "application\/vnd.ibm.modcap"}, {".log": "text\/plain"}, {".lostxml": "application\/lost+xml"}, {".lrf": "application\/octet-stream"}, {".lrm": "application\/vnd.ms-lrm"}, {".ltf": "application\/vnd.frogans.ltf"}, {".lvp": "audio\/vnd.lucent.voice"}, {".lwp": "application\/vnd.lotus-wordpro"}, {".lzh": "application\/octet-stream"}, {".m13": "application\/x-msmediaview"}, {".m14": "application\/x-msmediaview"}, {".m1v": "video\/mpeg"}, {".m2a": "audio\/mpeg"}, {".m2v": "video\/mpeg"}, {".m3a": "audio\/mpeg"}, {".m3u": "audio\/x-mpegurl"}, {".m4u": "video\/vnd.mpegurl"}, {".m4v": "video\/x-m4v"}, {".ma": "application\/mathematica"}, {".mag": "application\/vnd.ecowin.chart"}, {".maker": "application\/vnd.framemaker"}, {".man": "text\/troff"}, {".mathml": "application\/mathml+xml"}, {".mb": "application\/mathematica"}, {".mbk": "application\/vnd.mobius.mbk"}, {".mbox": "application\/mbox"}, {".mc1": "application\/vnd.medcalcdata"}, {".mcd": "application\/vnd.mcd"}, {".mcurl": "text\/vnd.curl.mcurl"}, {".mdb": "application\/x-msaccess"}, {".mdi": "image\/vnd.ms-modi"}, {".me": "text\/troff"}, {".mesh": "model\/mesh"}, {".mfm": "application\/vnd.mfmp"}, {".mgz": "application\/vnd.proteus.magazine"}, {".mht": "message\/rfc822"}, {".mhtml": "message\/rfc822"}, {".mid": "audio\/midi"}, {".midi": "audio\/midi"}, {".mif": "application\/vnd.mif"}, {".mime": "message\/rfc822"}, {".mj2": "video\/mj2"}, {".mjp2": "video\/mj2"}, {".mlp": "application\/vnd.dolby.mlp"}, {".mmd": "application\/vnd.chipnuts.karaoke-mmd"}, {".mmf": "application\/vnd.smaf"}, {".mmr": "image\/vnd.fujixerox.edmics-mmr"}, {".mny": "application\/x-msmoney"}, {".mobi": "application\/x-mobipocket-ebook"}, {".mov": "video\/quicktime"}, {".movie": "video\/x-sgi-movie"}, {".mp2": "audio\/mpeg"}, {".mp2a": "audio\/mpeg"}, {".mp3": "audio\/mpeg"}, {".mp4": "video\/mp4"}, {".mp4a": "audio\/mp4"}, {".mp4s": "application\/mp4"}, {".mp4v": "video\/mp4"}, {".mpa": "video\/mpeg"}, {".mpc": "application\/vnd.mophun.certificate"}, {".mpe": "video\/mpeg"}, {".mpeg": "video\/mpeg"}, {".mpg": "video\/mpeg"}, {".mpg4": "video\/mp4"}, {".mpga": "audio\/mpeg"}, {".mpkg": "application\/vnd.apple.installer+xml"}, {".mpm": "application\/vnd.blueice.multipass"}, {".mpn": "application\/vnd.mophun.application"}, {".mpp": "application\/vnd.ms-project"}, {".mpt": "application\/vnd.ms-project"}, {".mpy": "application\/vnd.ibm.minipay"}, {".mqy": "application\/vnd.mobius.mqy"}, {".mrc": "application\/marc"}, {".ms": "text\/troff"}, {".mscml": "application\/mediaservercontrol+xml"}, {".mseed": "application\/vnd.fdsn.mseed"}, {".mseq": "application\/vnd.mseq"}, {".msf": "application\/vnd.epson.msf"}, {".msh": "model\/mesh"}, {".msi": "application\/x-msdownload"}, {".msl": "application\/vnd.mobius.msl"}, {".msty": "application\/vnd.muvee.style"}, {".mts": "model\/vnd.mts"}, {".mus": "application\/vnd.musician"}, {".musicxml": "application\/vnd.recordare.musicxml+xml"}, {".mvb": "application\/x-msmediaview"}, {".mwf": "application\/vnd.mfer"}, {".mxf": "application\/mxf"}, {".mxl": "application\/vnd.recordare.musicxml"}, {".mxml": "application\/xv+xml"}, {".mxs": "application\/vnd.triscape.mxs"}, {".mxu": "video\/vnd.mpegurl"}, {".n-gage": "application\/vnd.nokia.n-gage.symbian.install"}, {".nb": "application\/mathematica"}, {".nc": "application\/x-netcdf"}, {".ncx": "application\/x-dtbncx+xml"}, {".ngdat": "application\/vnd.nokia.n-gage.data"}, {".nlu": "application\/vnd.neurolanguage.nlu"}, {".nml": "application\/vnd.enliven"}, {".nnd": "application\/vnd.noblenet-directory"}, {".nns": "application\/vnd.noblenet-sealer"}, {".nnw": "application\/vnd.noblenet-web"}, {".npx": "image\/vnd.net-fpx"}, {".nsf": "application\/vnd.lotus-notes"}, {".nws": "message\/rfc822"}, {".o": "application\/octet-stream"}, {".oa2": "application\/vnd.fujitsu.oasys2"}, {".oa3": "application\/vnd.fujitsu.oasys3"}, {".oas": "application\/vnd.fujitsu.oasys"}, {".obd": "application\/x-msbinder"}, {".obj": "application\/octet-stream"}, {".oda": "application\/oda"}, {".odb": "application\/vnd.oasis.opendocument.database"}, {".odc": "application\/vnd.oasis.opendocument.chart"}, {".odf": "application\/vnd.oasis.opendocument.formula"}, {".odft": "application\/vnd.oasis.opendocument.formula-template"}, {".odg": "application\/vnd.oasis.opendocument.graphics"}, {".odi": "application\/vnd.oasis.opendocument.image"}, {".odp": "application\/vnd.oasis.opendocument.presentation"}, {".ods": "application\/vnd.oasis.opendocument.spreadsheet"}, {".odt": "application\/vnd.oasis.opendocument.text"}, {".oga": "audio\/ogg"}, {".ogg": "audio\/ogg"}, {".ogv": "video\/ogg"}, {".ogx": "application\/ogg"}, {".onepkg": "application\/onenote"}, {".onetmp": "application\/onenote"}, {".onetoc": "application\/onenote"}, {".onetoc2": "application\/onenote"}, {".opf": "application\/oebps-package+xml"}, {".oprc": "application\/vnd.palm"}, {".org": "application\/vnd.lotus-organizer"}, {".osf": "application\/vnd.yamaha.openscoreformat"}, {".osfpvg": "application\/vnd.yamaha.openscoreformat.osfpvg+xml"}, {".otc": "application\/vnd.oasis.opendocument.chart-template"}, {".otf": "application\/x-font-otf"}, {".otg": "application\/vnd.oasis.opendocument.graphics-template"}, {".oth": "application\/vnd.oasis.opendocument.text-web"}, {".oti": "application\/vnd.oasis.opendocument.image-template"}, {".otm": "application\/vnd.oasis.opendocument.text-master"}, {".otp": "application\/vnd.oasis.opendocument.presentation-template"}, {".ots": "application\/vnd.oasis.opendocument.spreadsheet-template"}, {".ott": "application\/vnd.oasis.opendocument.text-template"}, {".oxt": "application\/vnd.openofficeorg.extension"}, {".p": "text\/x-pascal"}, {".p10": "application\/pkcs10"}, {".p12": "application\/x-pkcs12"}, {".p7b": "application\/x-pkcs7-certificates"}, {".p7c": "application\/pkcs7-mime"}, {".p7m": "application\/pkcs7-mime"}, {".p7r": "application\/x-pkcs7-certreqresp"}, {".p7s": "application\/pkcs7-signature"}, {".pas": "text\/x-pascal"}, {".pbd": "application\/vnd.powerbuilder6"}, {".pbm": "image\/x-portable-bitmap"}, {".pcf": "application\/x-font-pcf"}, {".pcl": "application\/vnd.hp-pcl"}, {".pclxl": "application\/vnd.hp-pclxl"}, {".pct": "image\/x-pict"}, {".pcurl": "application\/vnd.curl.pcurl"}, {".pcx": "image\/x-pcx"}, {".pdb": "application\/vnd.palm"}, {".pdf": "application\/pdf"}, {".pfa": "application\/x-font-type1"}, {".pfb": "application\/x-font-type1"}, {".pfm": "application\/x-font-type1"}, {".pfr": "application\/font-tdpfr"}, {".pfx": "application\/x-pkcs12"}, {".pgm": "image\/x-portable-graymap"}, {".pgn": "application\/x-chess-pgn"}, {".pgp": "application\/pgp-encrypted"}, {".pic": "image\/x-pict"}, {".pkg": "application\/octet-stream"}, {".pki": "application\/pkixcmp"}, {".pkipath": "application\/pkix-pkipath"}, {".pl": "text\/plain"}, {".plb": "application\/vnd.3gpp.pic-bw-large"}, {".plc": "application\/vnd.mobius.plc"}, {".plf": "application\/vnd.pocketlearn"}, {".pls": "application\/pls+xml"}, {".pml": "application\/vnd.ctc-posml"}, {".png": "image\/png"}, {".pnm": "image\/x-portable-anymap"}, {".portpkg": "application\/vnd.macports.portpkg"}, {".pot": "application\/vnd.ms-powerpoint"}, {".potm": "application\/vnd.ms-powerpoint.template.macroenabled.12"}, {".potx": "application\/vnd.openxmlformats-officedocument.presentationml.template"}, {".ppa": "application\/vnd.ms-powerpoint"}, {".ppam": "application\/vnd.ms-powerpoint.addin.macroenabled.12"}, {".ppd": "application\/vnd.cups-ppd"}, {".ppm": "image\/x-portable-pixmap"}, {".pps": "application\/vnd.ms-powerpoint"}, {".ppsm": "application\/vnd.ms-powerpoint.slideshow.macroenabled.12"}, {".ppsx": "application\/vnd.openxmlformats-officedocument.presentationml.slideshow"}, {".ppt": "application\/vnd.ms-powerpoint"}, {".pptm": "application\/vnd.ms-powerpoint.presentation.macroenabled.12"}, {".pptx": "application\/vnd.openxmlformats-officedocument.presentationml.presentation"}, {".pqa": "application\/vnd.palm"}, {".prc": "application\/x-mobipocket-ebook"}, {".pre": "application\/vnd.lotus-freelance"}, {".prf": "application\/pics-rules"}, {".ps": "application\/postscript"}, {".psb": "application\/vnd.3gpp.pic-bw-small"}, {".psd": "image\/vnd.adobe.photoshop"}, {".psf": "application\/x-font-linux-psf"}, {".ptid": "application\/vnd.pvi.ptid1"}, {".pub": "application\/x-mspublisher"}, {".pvb": "application\/vnd.3gpp.pic-bw-var"}, {".pwn": "application\/vnd.3m.post-it-notes"}, {".pwz": "application\/vnd.ms-powerpoint"}, {".py": "text\/x-python"}, {".pya": "audio\/vnd.ms-playready.media.pya"}, {".pyc": "application\/x-python-code"}, {".pyo": "application\/x-python-code"}, {".pyv": "video\/vnd.ms-playready.media.pyv"}, {".qam": "application\/vnd.epson.quickanime"}, {".qbo": "application\/vnd.intu.qbo"}, {".qfx": "application\/vnd.intu.qfx"}, {".qps": "application\/vnd.publishare-delta-tree"}, {".qt": "video\/quicktime"}, {".qwd": "application\/vnd.quark.quarkxpress"}, {".qwt": "application\/vnd.quark.quarkxpress"}, {".qxb": "application\/vnd.quark.quarkxpress"}, {".qxd": "application\/vnd.quark.quarkxpress"}, {".qxl": "application\/vnd.quark.quarkxpress"}, {".qxt": "application\/vnd.quark.quarkxpress"}, {".ra": "audio\/x-pn-realaudio"}, {".ram": "audio\/x-pn-realaudio"}, {".rar": "application\/x-rar-compressed"}, {".ras": "image\/x-cmu-raster"}, {".rcprofile": "application\/vnd.ipunplugged.rcprofile"}, {".rdf": "application\/rdf+xml"}, {".rdz": "application\/vnd.data-vision.rdz"}, {".rep": "application\/vnd.businessobjects"}, {".res": "application\/x-dtbresource+xml"}, {".rgb": "image\/x-rgb"}, {".rif": "application\/reginfo+xml"}, {".rl": "application\/resource-lists+xml"}, {".rlc": "image\/vnd.fujixerox.edmics-rlc"}, {".rld": "application\/resource-lists-diff+xml"}, {".rm": "application\/vnd.rn-realmedia"}, {".rmi": "audio\/midi"}, {".rmp": "audio\/x-pn-realaudio-plugin"}, {".rms": "application\/vnd.jcp.javame.midlet-rms"}, {".rnc": "application\/relax-ng-compact-syntax"}, {".roff": "text\/troff"}, {".rpm": "application\/x-rpm"}, {".rpss": "application\/vnd.nokia.radio-presets"}, {".rpst": "application\/vnd.nokia.radio-preset"}, {".rq": "application\/sparql-query"}, {".rs": "application\/rls-services+xml"}, {".rsd": "application\/rsd+xml"}, {".rss": "application\/rss+xml"}, {".rtf": "application\/rtf"}, {".rtx": "text\/richtext"}, {".s": "text\/x-asm"}, {".saf": "application\/vnd.yamaha.smaf-audio"}, {".sbml": "application\/sbml+xml"}, {".sc": "application\/vnd.ibm.secure-container"}, {".scd": "application\/x-msschedule"}, {".scm": "application\/vnd.lotus-screencam"}, {".scq": "application\/scvp-cv-request"}, {".scs": "application\/scvp-cv-response"}, {".scurl": "text\/vnd.curl.scurl"}, {".sda": "application\/vnd.stardivision.draw"}, {".sdc": "application\/vnd.stardivision.calc"}, {".sdd": "application\/vnd.stardivision.impress"}, {".sdkd": "application\/vnd.solent.sdkm+xml"}, {".sdkm": "application\/vnd.solent.sdkm+xml"}, {".sdp": "application\/sdp"}, {".sdw": "application\/vnd.stardivision.writer"}, {".see": "application\/vnd.seemail"}, {".seed": "application\/vnd.fdsn.seed"}, {".sema": "application\/vnd.sema"}, {".semd": "application\/vnd.semd"}, {".semf": "application\/vnd.semf"}, {".ser": "application\/java-serialized-object"}, {".setpay": "application\/set-payment-initiation"}, {".setreg": "application\/set-registration-initiation"}, {".sfd-hdstx": "application\/vnd.hydrostatix.sof-data"}, {".sfs": "application\/vnd.spotfire.sfs"}, {".sgl": "application\/vnd.stardivision.writer-global"}, {".sgm": "text\/sgml"}, {".sgml": "text\/sgml"}, {".sh": "application\/x-sh"}, {".shar": "application\/x-shar"}, {".shf": "application\/shf+xml"}, {".si": "text\/vnd.wap.si"}, {".sic": "application\/vnd.wap.sic"}, {".sig": "application\/pgp-signature"}, {".silo": "model\/mesh"}, {".sis": "application\/vnd.symbian.install"}, {".sisx": "application\/vnd.symbian.install"}, {".sit": "application\/x-stuffit"}, {".sitx": "application\/x-stuffitx"}, {".skd": "application\/vnd.koan"}, {".skm": "application\/vnd.koan"}, {".skp": "application\/vnd.koan"}, {".skt": "application\/vnd.koan"}, {".sl": "text\/vnd.wap.sl"}, {".slc": "application\/vnd.wap.slc"}, {".sldm": "application\/vnd.ms-powerpoint.slide.macroenabled.12"}, {".sldx": "application\/vnd.openxmlformats-officedocument.presentationml.slide"}, {".slt": "application\/vnd.epson.salt"}, {".smf": "application\/vnd.stardivision.math"}, {".smi": "application\/smil+xml"}, {".smil": "application\/smil+xml"}, {".snd": "audio\/basic"}, {".snf": "application\/x-font-snf"}, {".so": "application\/octet-stream"}, {".spc": "application\/x-pkcs7-certificates"}, {".spf": "application\/vnd.yamaha.smaf-phrase"}, {".spl": "application\/x-futuresplash"}, {".spot": "text\/vnd.in3d.spot"}, {".spp": "application\/scvp-vp-response"}, {".spq": "application\/scvp-vp-request"}, {".spx": "audio\/ogg"}, {".src": "application\/x-wais-source"}, {".srx": "application\/sparql-results+xml"}, {".sse": "application\/vnd.kodak-descriptor"}, {".ssf": "application\/vnd.epson.ssf"}, {".ssml": "application\/ssml+xml"}, {".stc": "application\/vnd.sun.xml.calc.template"}, {".std": "application\/vnd.sun.xml.draw.template"}, {".stf": "application\/vnd.wt.stf"}, {".sti": "application\/vnd.sun.xml.impress.template"}, {".stk": "application\/hyperstudio"}, {".stl": "application\/vnd.ms-pki.stl"}, {".str": "application\/vnd.pg.format"}, {".stw": "application\/vnd.sun.xml.writer.template"}, {".sus": "application\/vnd.sus-calendar"}, {".susp": "application\/vnd.sus-calendar"}, {".sv4cpio": "application\/x-sv4cpio"}, {".sv4crc": "application\/x-sv4crc"}, {".svd": "application\/vnd.svd"}, {".svg": "image\/svg+xml"}, {".svgz": "image\/svg+xml"}, {".swa": "application\/x-director"}, {".swf": "application\/x-shockwave-flash"}, {".swi": "application\/vnd.arastra.swi"}, {".sxc": "application\/vnd.sun.xml.calc"}, {".sxd": "application\/vnd.sun.xml.draw"}, {".sxg": "application\/vnd.sun.xml.writer.global"}, {".sxi": "application\/vnd.sun.xml.impress"}, {".sxm": "application\/vnd.sun.xml.math"}, {".sxw": "application\/vnd.sun.xml.writer"}, {".t": "text\/troff"}, {".tao": "application\/vnd.tao.intent-module-archive"}, {".tar": "application\/x-tar"}, {".tcap": "application\/vnd.3gpp2.tcap"}, {".tcl": "application\/x-tcl"}, {".teacher": "application\/vnd.smart.teacher"}, {".tex": "application\/x-tex"}, {".texi": "application\/x-texinfo"}, {".texinfo": "application\/x-texinfo"}, {".text": "text\/plain"}, {".tfm": "application\/x-tex-tfm"}, {".tgz": "application\/x-gzip"}, {".tif": "image\/tiff"}, {".tiff": "image\/tiff"}, {".tmo": "application\/vnd.tmobile-livetv"}, {".torrent": "application\/x-bittorrent"}, {".tpl": "application\/vnd.groove-tool-template"}, {".tpt": "application\/vnd.trid.tpt"}, {".tr": "text\/troff"}, {".tra": "application\/vnd.trueapp"}, {".trm": "application\/x-msterminal"}, {".tsv": "text\/tab-separated-values"}, {".ttc": "application\/x-font-ttf"}, {".ttf": "application\/x-font-ttf"}, {".twd": "application\/vnd.simtech-mindmapper"}, {".twds": "application\/vnd.simtech-mindmapper"}, {".txd": "application\/vnd.genomatix.tuxedo"}, {".txf": "application\/vnd.mobius.txf"}, {".txt": "text\/plain"}, {".u32": "application\/x-authorware-bin"}, {".udeb": "application\/x-debian-package"}, {".ufd": "application\/vnd.ufdl"}, {".ufdl": "application\/vnd.ufdl"}, {".umj": "application\/vnd.umajin"}, {".unityweb": "application\/vnd.unity"}, {".uoml": "application\/vnd.uoml+xml"}, {".uri": "text\/uri-list"}, {".uris": "text\/uri-list"}, {".urls": "text\/uri-list"}, {".ustar": "application\/x-ustar"}, {".utz": "application\/vnd.uiq.theme"}, {".uu": "text\/x-uuencode"}, {".vcd": "application\/x-cdlink"}, {".vcf": "text\/x-vcard"}, {".vcg": "application\/vnd.groove-vcard"}, {".vcs": "text\/x-vcalendar"}, {".vcx": "application\/vnd.vcx"}, {".vis": "application\/vnd.visionary"}, {".viv": "video\/vnd.vivo"}, {".vor": "application\/vnd.stardivision.writer"}, {".vox": "application\/x-authorware-bin"}, {".vrml": "model\/vrml"}, {".vsd": "application\/vnd.visio"}, {".vsf": "application\/vnd.vsf"}, {".vss": "application\/vnd.visio"}, {".vst": "application\/vnd.visio"}, {".vsw": "application\/vnd.visio"}, {".vtu": "model\/vnd.vtu"}, {".vxml": "application\/voicexml+xml"}, {".w3d": "application\/x-director"}, {".wad": "application\/x-doom"}, {".wav": "audio\/x-wav"}, {".wax": "audio\/x-ms-wax"}, {".wbmp": "image\/vnd.wap.wbmp"}, {".wbs": "application\/vnd.criticaltools.wbs+xml"}, {".wbxml": "application\/vnd.wap.wbxml"}, {".wcm": "application\/vnd.ms-works"}, {".wdb": "application\/vnd.ms-works"}, {".wiz": "application\/msword"}, {".wks": "application\/vnd.ms-works"}, {".wm": "video\/x-ms-wm"}, {".wma": "audio\/x-ms-wma"}, {".wmd": "application\/x-ms-wmd"}, {".wmf": "application\/x-msmetafile"}, {".wml": "text\/vnd.wap.wml"}, {".wmlc": "application\/vnd.wap.wmlc"}, {".wmls": "text\/vnd.wap.wmlscript"}, {".wmlsc": "application\/vnd.wap.wmlscriptc"}, {".wmv": "video\/x-ms-wmv"}, {".wmx": "video\/x-ms-wmx"}, {".wmz": "application\/x-ms-wmz"}, {".wpd": "application\/vnd.wordperfect"}, {".wpl": "application\/vnd.ms-wpl"}, {".wps": "application\/vnd.ms-works"}, {".wqd": "application\/vnd.wqd"}, {".wri": "application\/x-mswrite"}, {".wrl": "model\/vrml"}, {".wsdl": "application\/wsdl+xml"}, {".wspolicy": "application\/wspolicy+xml"}, {".wtb": "application\/vnd.webturbo"}, {".wvx": "video\/x-ms-wvx"}, {".x32": "application\/x-authorware-bin"}, {".x3d": "application\/vnd.hzn-3d-crossword"}, {".xap": "application\/x-silverlight-app"}, {".xar": "application\/vnd.xara"}, {".xbap": "application\/x-ms-xbap"}, {".xbd": "application\/vnd.fujixerox.docuworks.binder"}, {".xbm": "image\/x-xbitmap"}, {".xdm": "application\/vnd.syncml.dm+xml"}, {".xdp": "application\/vnd.adobe.xdp+xml"}, {".xdw": "application\/vnd.fujixerox.docuworks"}, {".xenc": "application\/xenc+xml"}, {".xer": "application\/patch-ops-error+xml"}, {".xfdf": "application\/vnd.adobe.xfdf"}, {".xfdl": "application\/vnd.xfdl"}, {".xht": "application\/xhtml+xml"}, {".xhtml": "application\/xhtml+xml"}, {".xhvml": "application\/xv+xml"}, {".xif": "image\/vnd.xiff"}, {".xla": "application\/vnd.ms-excel"}, {".xlam": "application\/vnd.ms-excel.addin.macroenabled.12"}, {".xlb": "application\/vnd.ms-excel"}, {".xlc": "application\/vnd.ms-excel"}, {".xlm": "application\/vnd.ms-excel"}, {".xls": "application\/vnd.ms-excel"}, {".xlsb": "application\/vnd.ms-excel.sheet.binary.macroenabled.12"}, {".xlsm": "application\/vnd.ms-excel.sheet.macroenabled.12"}, {".xlsx": "application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}, {".xlt": "application\/vnd.ms-excel"}, {".xltm": "application\/vnd.ms-excel.template.macroenabled.12"}, {".xltx": "application\/vnd.openxmlformats-officedocument.spreadsheetml.template"}, {".xlw": "application\/vnd.ms-excel"}, {".xml": "application\/xml"}, {".xo": "application\/vnd.olpc-sugar"}, {".xop": "application\/xop+xml"}, {".xpdl": "application\/xml"}, {".xpi": "application\/x-xpinstall"}, {".xpm": "image\/x-xpixmap"}, {".xpr": "application\/vnd.is-xpr"}, {".xps": "application\/vnd.ms-xpsdocument"}, {".xpw": "application\/vnd.intercon.formnet"}, {".xpx": "application\/vnd.intercon.formnet"}, {".xsl": "application\/xml"}, {".xslt": "application\/xslt+xml"}, {".xsm": "application\/vnd.syncml+xml"}, {".xspf": "application\/xspf+xml"}, {".xul": "application\/vnd.mozilla.xul+xml"}, {".xvm": "application\/xv+xml"}, {".xvml": "application\/xv+xml"}, {".xwd": "image\/x-xwindowdump"}, {".xyz": "chemical\/x-xyz"}, {".zaz": "application\/vnd.zzazz.deck+xml"}, {".zip": "application\/zip"}, {".zir": "application\/vnd.zul"}, {".zirz": "application\/vnd.zul"}, {".zmm": "application\/vnd.handheld-entertainment+xml"}]
M contenttypes.nimcontenttypes.nim

@@ -1,6 +1,15 @@

-import mimetypes, strutils +import json, strutils, strtabs + + +proc loadContentTypes(): StringTableRef = + result = newStringTable(modeCaseInsensitive) + const raw_json = "contenttypes.json".slurp + let json = raw_json.parseJson + for item in json.items: + for pair in item.pairs: + result[$pair.key] = $pair.val -let CONTENT_TYPES* = newMimetypes() +let CONTENT_TYPES* = loadContentTypes() proc isBinary*(ct: string): bool = if ct.endsWith "xml":
M litestore.nimlitestore.nim

@@ -7,7 +7,7 @@ oids,

times, json, pegs, - mimetypes, + strtabs, base64 import types,

@@ -19,51 +19,36 @@ {.compile: "vendor/sqlite/libsqlite3.c".}

{.passC: "-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS".} -# TODO manage stores directory -let cwd = getCurrentDir() - # Manage Datastores -proc createDatastore*(name:string) = - if name.changeFileExt("ls").fileExists: - raise newException(EDatastoreExists, "Datastore '$1' already exists." % name) - let store = db.open(cwd.joinPath(name.changeFileExt("ls")), "", "", "") +proc createDatastore*(file:string) = + if file.fileExists: + raise newException(EDatastoreExists, "Datastore '$1' already exists." % file) + let store = db.open(file, "", "", "") store.exec(SQL_CREATE_DOCUMENTS_TABLE) store.exec(SQL_CREATE_SEARCHCONTENTS_TABLE) store.exec(SQL_CREATE_TAGS_TABLE) -proc deleteDatastore*(name:string) = +proc deleteDatastore*(file:string) = try: - cwd.joinPath(name.changeFileExt("ls")).removeFile + file.removeFile except: - raise newException(EDatastoreUnavailable, "Datastore '$1' cannot deleted." % name) + raise newException(EDatastoreUnavailable, "Datastore '$1' cannot deleted." % file) -proc openDatastore(name:string): Datastore = - if not name.changeFileExt("ls").fileExists: - raise newException(EDatastoreDoesNotExist, "Datastore '$1' does not exists." % name) +proc openDatastore(file:string): Datastore = + if not file.fileExists: + raise newException(EDatastoreDoesNotExist, "Datastore '$1' does not exists." % file) try: - result.db = db.open(cwd.joinPath(name.changeFileExt("ls")), "", "", "") - result.name = name - result.path = cwd.joinPath(name) + result.db = db.open(file, "", "", "") + result.path = file except: - raise newException(EDatastoreUnavailable, "Datastore '$1' cannot be opened." % name) + raise newException(EDatastoreUnavailable, "Datastore '$1' cannot be opened." % file) proc closeDatastore(store:Datastore) = try: db.close(store.db) except: - raise newException(EDatastoreUnavailable, "Datastore '$1' cannot be closed." % store.name) - -proc retrieveDatastores*(): string = - var stores = newSeq[JsonNode](0) - for f in walkFiles(cwd.joinPath("*.ls")): - var name = f.extractFilename.changeFileExt("") - var store = name.openDataStore() - var n_documents = store.db.getRow(SQL_COUNT_DOCUMENTS)[0].parseInt - var n_tags = store.db.getRow(SQL_COUNT_TAGS)[0].parseInt - stores.add(%[("id", %name), ("documents", %n_documents), ("tags", %n_tags)]) - store.closeDatastore() - return $(%(stores)) + raise newException(EDatastoreUnavailable, "Datastore '$1' cannot be closed." % store.path) # Manage Documents

@@ -84,18 +69,18 @@ store.db.exec(SQL_INSERT_SEARCHCONTENT, result, data)

store.addDocumentSystemTags(result, contenttype) return result -proc updateDocument*(store: Datastore, id: string, data: string, contenttype = "text/plain", binary = -1, searchable = 1) = +proc updateDocument*(store: Datastore, id: string, data: string, contenttype = "text/plain", binary = -1, searchable = 1): int64 = var binary = checkIfBinary(binary, contenttype) var data = data if binary == 1: data = data.encode(data.len*2) - store.db.exec(SQL_UPDATE_DOCUMENT, data, contenttype, binary, searchable, getTime().getGMTime().format("yyyy-MM-dd'T'hh:mm:ss'Z'"), id) + result = store.db.execAffectedRows(SQL_UPDATE_DOCUMENT, data, contenttype, binary, searchable, getTime().getGMTime().format("yyyy-MM-dd'T'hh:mm:ss'Z'"), id) store.deleteDocumentSystemTags(id) store.addDocumentSystemTags(id, contenttype) store.db.exec(SQL_UPDATE_SEARCHCONTENT, data, id) -proc deleteDocument*(store: Datastore, id: string) = - store.db.exec(SQL_DELETE_DOCUMENT, id) +proc deleteDocument*(store: Datastore, id: string): int64 = + result = store.db.execAffectedRows(SQL_DELETE_DOCUMENT, id) store.db.exec(SQL_DELETE_SEARCHCONTENT, id) store.db.exec(SQL_DELETE_DOCUMENT_TAGS, id)

@@ -121,10 +106,10 @@ if not tagid.match(PEG_USER_TAG):

raise newException(EInvalidTag, "Invalid Tag: $1" % tagid) store.db.exec(SQL_INSERT_TAG, tagid, documentid) -proc deleteTag*(store: Datastore, tagid, documentid: string) = +proc deleteTag*(store: Datastore, tagid, documentid: string): int64 = if not tagid.match(PEG_USER_TAG): raise newException(EInvalidTag, "Invalid Tag: $1" % tagid) - store.db.exec(SQL_DELETE_TAG, documentid, tagid) + return store.db.execAffectedRows(SQL_DELETE_TAG, documentid, tagid) proc retrieveTag*(store: Datastore, id: string, options: QueryOptions = newQueryOptions()): string = var options = options

@@ -140,16 +125,17 @@ var tags = newSeq[JsonNode](0)

for tag in raw_tags: tags.add(%[("id", %tag[0]), ("documents", %(tag[1].parseInt))]) return $(%tags) - -# TODO Pack/Unpack Directories proc packDir*(store: Datastore, dir: string) = if not dir.dirExists: raise newException(EDirectoryNotFound, "Directory '$1' not found." % dir) for f in dir.walkDirRec(): + let ext = f.splitFile.ext var d_id = f var d_contents = f.readFile - var d_ct = CONTENT_TYPES.getMimetype(f.splitFile.ext, "application/octet-stream") + var d_ct = "text/plain" + if CONTENT_TYPES.hasKey(ext): + d_ct = CONTENT_TYPES[ext] var d_binary = 0 var d_searchable = 1 if d_ct.isBinary:

@@ -159,16 +145,30 @@ discard store.createDocument(d_id, d_contents, d_ct, d_binary, d_searchable)

store.db.exec(SQL_INSERT_TAG, "$dir:"&dir, d_id) proc unpackDir*(store: Datastore, dir: string) = - discard + let docs = store.db.getAllRows(SQL_SELECT_DOCUMENTS_BY_TAG, "$dir:"&dir) + for doc in docs: + let file = doc[0] + var data: string + if doc[3].parseInt == 1: + data = doc[1].decode + else: + data = doc[1] + file.parentDir.createDir + file.writeFile(data) + +proc deleteDocumentsByTag(store: Datastore, tag: string): int64 = + result = 0 + var ids = store.db.getAllRows(SQL_SELECT_DOCUMENT_IDS_BY_TAG, tag) + for id in ids: + result.inc(store.deleteDocument(id[0]).int) # Test -var name = "test" -var file = cwd.joinPath(name&".ls") +var file = "test.ls" if file.fileExists: file.removeFile -createDatastore(name) -var store = name.openDatastore +createDatastore(file) +var store = file.openDatastore var id1 = store.createDocument "This is a test document" var id2 = store.createDocument "This is another test document" var id3 = store.createDocument "This is yet another test document"

@@ -182,5 +182,8 @@ var opts = newQueryOptions()

#opts.tags = "test,test2" #opts.search = "another yet" store.packDir("nimcache") -echo store.retrieveDocuments(opts) +"test".createDir +"test".setCurrentDir +store.unpackDir("nimcache") +echo store.deleteDocumentsByTag("$dir:nimcache")
M queries.nimqueries.nim

@@ -98,3 +98,15 @@ UPDATE searchcontents

SET content = ? WHERE document_id = ? """ + +const SQL_SELECT_DOCUMENTS_BY_TAG* = sql""" +SELECT * FROM documents, tags +WHERE documents.id = tags.document_id AND +tag_id = ? +""" + +const SQL_SELECT_DOCUMENT_IDS_BY_TAG* = sql""" +SELECT id FROM documents, tags +WHERE documents.id = tags.document_id AND +tag_id = ? +"""
M types.nimtypes.nim

@@ -9,7 +9,6 @@ EDirectoryNotFound* = object of Exception

Datastore* = object db*: TDbConn path*: string - name*: string QueryOptions* = object single*:bool limit*: int
M utils.nimutils.nim

@@ -33,8 +33,11 @@ clause == "modified DESC"

proc prepareSelectDocumentsQuery*(options: QueryOptions): string = result = "SELECT * " - result = result & "FROM documents, searchcontents " - result = result & "WHERE documents.id = searchcontents.document_id " + if options.search.len > 0: + result = result & "FROM documents, searchcontents " + result = result & "WHERE documents.id = searchcontents.document_id " + else: + result = result & "FROM documents " if options.single: result = result & "AND id = ?" if options.tags.len > 0: