| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- /*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
- package tools.haxelib;
- class User extends neko.db.Object {
- public static var manager = new neko.db.Manager<User>(User);
- public var id : Int;
- public var name : String;
- public var fullname : String;
- public var email : String;
- public var pass : String;
- }
- class Project extends neko.db.Object {
- static function RELATIONS() {
- return [
- { key : "owner", prop : "owner", manager : User.manager },
- { key : "version", prop : "version", manager : Version.manager },
- ];
- }
- public static var manager = new ProjectManager(Project);
- public var id : Int;
- public var name : String;
- public var description : String;
- public var website : String;
- public var license : String;
- public var downloads : Int;
- public var owner(dynamic,dynamic) : User;
- public var version(dynamic,dynamic) : Version;
- }
- class Tag extends neko.db.Object {
- static function RELATIONS() {
- return [
- { key : "project", prop : "project", manager : Project.manager },
- ];
- }
- public static var manager = new TagManager(Tag);
- public var id : Int;
- public var tag : String;
- public var project(dynamic,dynamic) : Project;
- }
- class Version extends neko.db.Object {
- static function RELATIONS() {
- return [{ key : "project", prop : "project", manager : Project.manager }];
- }
- public static var manager = new VersionManager(Version);
- public var id : Int;
- public var project(dynamic,dynamic) : Project;
- public var name : String;
- public var date : String; // sqlite does not have a proper 'date' type
- public var comments : String;
- public var downloads : Int;
- public var documentation : Null<String>;
- }
- class Developer extends neko.db.Object {
- static var TABLE_IDS = ["user","project"];
- static function RELATIONS() {
- return [
- { key : "user", prop : "user", manager : User.manager },
- { key : "project", prop : "project", manager : Project.manager },
- ];
- }
- public static var manager = new neko.db.Manager<Developer>(Developer);
- public var user(dynamic,dynamic) : User;
- public var project(dynamic,dynamic) : Project;
- }
- class ProjectManager extends neko.db.Manager<Project> {
- public function containing( word ) : List<{ id : Int, name : String }> {
- word = quote("%"+word+"%");
- return results("SELECT id, name FROM Project WHERE name LIKE "+word+" OR description LIKE "+word);
- }
- public function allByName() {
- return objects("SELECT * FROM Project ORDER BY name COLLATE NOCASE",false);
- }
- }
- class VersionManager extends neko.db.Manager<Version> {
- public function latest( n : Int ) {
- return objects("SELECT * FROM Version ORDER BY date DESC LIMIT "+n,false);
- }
- public function byProject( p : Project ) {
- return objects("SELECT * FROM Version WHERE project = "+p.id+" ORDER BY date DESC",false);
- }
- }
- class TagManager extends neko.db.Manager<Tag> {
- public function topTags( n : Int ) {
- return results("SELECT tag, COUNT(*) as count FROM Tag GROUP BY tag ORDER BY count DESC LIMIT "+n);
- }
- }
- class SiteDb {
- public static function create( db : sys.db.Connection ) {
- db.request("DROP TABLE IF EXISTS User");
- db.request("
- CREATE TABLE User (
- id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
- name VARCHAR(16) NOT NULL UNIQUE,
- fullname VARCHAR(50) NOT NULL,
- pass VARCHAR(32) NOT NULL,
- email VARCHAR(50) NOT NULL
- )
- ");
- db.request("DROP TABLE IF EXISTS Project");
- db.request("
- CREATE TABLE Project (
- id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
- owner INTEGER NOT NULL,
- name VARCHAR(32) NOT NULL UNIQUE,
- license VARCHAR(20) NOT NULL,
- description TEXT NOT NULL,
- website VARCHAR(100) NOT NULL,
- version INT,
- downloads INT NOT NULL
- )
- ");
- db.request("DROP TABLE IF EXISTS Version");
- db.request("
- CREATE TABLE Version (
- id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
- project INTEGER NOT NULL,
- downloads INTEGER NOT NULL,
- date VARCHAR(19) NOT NULL,
- name VARCHAR(32) NOT NULL,
- comments TEXT NOT NULL,
- documentation TEXT NULL
- )
- ");
- db.request("DROP TABLE IF EXISTS Developer");
- db.request("
- CREATE TABLE Developer (
- user INTEGER NOT NULL,
- project INTEGER NOT NULL
- )
- ");
- db.request("DROP TABLE IF EXISTS Tag");
- db.request("
- CREATE TABLE Tag (
- id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
- tag VARCHAR(32) NOT NULL,
- project INTEGER NOT NULL
- )
- ");
- db.request("DROP INDEX IF EXISTS TagSearch");
- db.request("CREATE INDEX TagSearch ON Tag(tag)");
- }
- }
|