* Represent jobs explicitly in the DB.

[?]
Mar 13, 2009, 2:49 PM
S5PV6IIMKJ7PGWIFLLXERHYF3BCP2UEGFRZEZLD6UUBLVEZXJLUAC

Dependencies

  • [2] D5QIOJGP * Move everything up one directory.
  • [3] SHZLOM5M * eval-jobs -> hydra_eval_jobs.
  • [4] GNIEG2GC * Disambiguate jobs by jobset name. I.e. jobs with the same name in
  • [5] JLDUSNUO * Unify rendering of finished and scheduled builds.
  • [6] PHX2HIVG * Store info about the build inputs in the build record.
  • [7] M552HLIA * Support variant builds.
  • [8] B72GLND4
  • [9] 6BLUKEQ2 * Caching of "path" inputs, and fake a revision number for those.
  • [10] J5UVLXOK * Start of a basic Catalyst web interface.
  • [11] 2T42QGZD * Register builds as GC roots so they don't get deleted.
  • [12] ZVTSOVHN * Support Subversion checkouts.
  • [13] RU7AQO7U * Role-based access control. Only admins can create projects. Only
  • [14] TLZ2SPBR
  • [15] V4RNHJNR * Add a link to each project's homepage. Suggested by karltk.
  • [16] VJHIHMEH * Store the meta.longDescription and meta.license attributes in the
  • [17] IN272KZW * Automatically keep all builds in the latest successful release in
  • [18] POPU2ATH * hydra_scheduler: use eval-jobs.
  • [19] 3E6IP3R3 * Add the name of the jobset to ReleaseSetJobs, otherwise we can't
  • [20] YTZOC7C5 * Editing of jobset inputs.
  • [21] ABEOQU7T
  • [22] SHBLLAVH * More global substitution.
  • [23] FPK5LF53 * Put the project-related actions in a separate controller. Put the
  • [24] R5D7DZPE
  • [25] CMU3YKOU * Store the release name.
  • [26] ECBA3GQO * Make the schema class names match the case of the SQL table names.
  • [27] TQKGQ5R3
  • [28] XNCWZ7OT * Get the job priority from the meta.schedulingPriority attribute.
  • [29] KOTB7BKV
  • [30] FHF6IZJQ * Basic release management: releases are now dynamically computed as
  • [31] 7YBYT2LQ
  • [32] ZEHSSVFG
  • [33] UMBR3VG3
  • [34] IK53RV4V
  • [35] GWCV3TQV * BuildInputs table: link to dependencies, include store paths.
  • [36] 3ZCEPLNO
  • [37] WYN733ST * Store build duration, handle cached builds.
  • [38] TWVSALRL * Allow the maximum number of concurrent builds per platform to be
  • [39] 67P45PY4
  • [40] BVOPAMLS
  • [41] CLJQCY2X * Store info about all the build actions and allow them to be
  • [42] L2E6EVE2 * Merged the Build and Job tables.
  • [43] YAPITGB3 * Boolean inputs.
  • [44] S66BOMVU * Added authentication.
  • [45] 37R34XJO * Negative caching: don't perform a build if a dependency already
  • [46] BHZXGT2H * Channels: provide an index page that lists all the packages in the
  • [47] X27GNHDV * Basic job info in the database.
  • [48] FDE3BJAP * Refactoring.
  • [49] EYNG4EL4 * Regenerate the bindings from a clean sqlite database.
  • [50] DVNWJXWW * Generic declaration of build products.
  • [51] FEMR2C5W
  • [52] AFTXA575 * $HYDRA_DATA environment variable.
  • [53] LCKWLQW3 * In Sqlite "release" is now a keyword, so use "release_" instead.
  • [54] VCOSLZRP
  • [55] D3DIBMOK * For products that are directories (like manuals), allow a default
  • [56] BD3GRK4B * Get rid of "positive failures" and separate log phases.
  • [57] H7CNGK4O * Log evaluation errors etc. in the DB.
  • [*] LBNVQXUB * Build the /build stuff in a separate controller.
  • [*] 2GK5DOU7 * Downloading closures.
  • [*] N22GPKYT * Put info about logs / build products in the DB.

Change contents

  • replacement in src/lib/Hydra/Helper/CatalystUtils.pm at line 57
    [5.233][5.233:266]()
    , job => $build->job
    [5.233]
    [5.266]
    , job => $build->get_column('job')
  • replacement in src/lib/Hydra/Helper/Nix.pm at line 127
    [5.1530][5.306:358]()
    { job => $primaryJob->job, finished => 1 },
    [5.1530]
    [5.1587]
    { job => $primaryJob->get_column('job'), finished => 1 },
  • replacement in src/lib/Hydra/Helper/Nix.pm at line 157
    [5.2478][5.359:412]()
    { job => $job->job, finished => 1 },
    [5.2478]
    [5.2536]
    { job => $job->get_column('job'), finished => 1 },
  • replacement in src/lib/Hydra/Schema/BuildInputs.pm at line 39
    [5.782][4.683:825]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:9gWr8DPEeH2BjoHT3nt0Lw
    [5.782]
    [5.924]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:uxfS8+GnU06sbx6nvWzTSQ
  • replacement in src/lib/Hydra/Schema/BuildProducts.pm at line 38
    [5.4922][4.826:968]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:GsPyt1OUQHWN6z7mSpNW2g
    [5.4922]
    [5.5064]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:wnnwDGQMGr2YAu++PYRSuA
  • replacement in src/lib/Hydra/Schema/BuildResultInfo.pm at line 38
    [5.2382][4.969:1111]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:zIpamqoL0AxNFDpQ/W1TVg
    [5.2382]
    [5.2524]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:CGlUjhJozOA4VCYaFtyhqw
  • replacement in src/lib/Hydra/Schema/BuildSchedulingInfo.pm at line 30
    [5.4473][4.1112:1254]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:McWRZEMJtjFIcR4LplCc9A
    [5.4473]
    [5.4615]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:X+Pz2XzTBNU3XdEcg49RyQ
  • replacement in src/lib/Hydra/Schema/BuildSteps.pm at line 38
    [5.2959][4.1255:1397]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:zuyAJq4T5Ynsq920Pd7hLg
    [5.2959]
    [5.2959]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:TtcOwOIZHO0vLSJ1CXF1bA
  • edit in src/lib/Hydra/Schema/Builds.pm at line 47
    [5.566]
    [5.5950]
    __PACKAGE__->belongs_to(
    "job",
    "Hydra::Schema::Jobs",
    { jobset => "jobset", name => "job", project => "project" },
    );
  • replacement in src/lib/Hydra/Schema/Builds.pm at line 84
    [5.6194][4.1398:1540]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:6taCYZNB0HaY+fvDjUhrYQ
    [5.6194]
    [5.3377]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:xqKyjCWVdoTyQJC28K3WXA
  • replacement in src/lib/Hydra/Schema/CachedPathInputs.pm at line 25
    [5.1497][4.1541:1683]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Jhu1KxMfSF1Y1b4VGUqTzg
    [5.1497]
    [5.1639]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Eo9F2GRzgzTGGx15JWBv6Q
  • replacement in src/lib/Hydra/Schema/CachedSubversionInputs.pm at line 23
    [5.2342][4.1684:1826]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:9aQa6Zo6z3lj/qFHNF5//w
    [5.2342]
    [5.2484]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:KeKwcnnPNoVO4eNr9+y+1g
  • file addition: Jobs.pm (----------)
    [2.477]
    package Hydra::Schema::Jobs;
    use strict;
    use warnings;
    use base 'DBIx::Class';
    __PACKAGE__->load_components("Core");
    __PACKAGE__->table("Jobs");
    __PACKAGE__->add_columns(
    "project",
    { data_type => "text", is_nullable => 0, size => undef },
    "jobset",
    { data_type => "text", is_nullable => 0, size => undef },
    "name",
    { data_type => "text", is_nullable => 0, size => undef },
    "active",
    { data_type => "integer", is_nullable => 0, size => undef },
    "errormsg",
    { data_type => "text", is_nullable => 0, size => undef },
    "firstevaltime",
    { data_type => "integer", is_nullable => 0, size => undef },
    "lastevaltime",
    { data_type => "integer", is_nullable => 0, size => undef },
    );
    __PACKAGE__->set_primary_key("project", "jobset", "name");
    __PACKAGE__->has_many(
    "builds",
    "Hydra::Schema::Builds",
    {
    "foreign.job" => "self.name",
    "foreign.jobset" => "self.jobset",
    "foreign.project" => "self.project",
    },
    );
    __PACKAGE__->belongs_to("project", "Hydra::Schema::Projects", { name => "project" });
    __PACKAGE__->belongs_to(
    "jobset",
    "Hydra::Schema::Jobsets",
    { name => "jobset", project => "project" },
    );
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:wJFyUvUACQHpaW/ktaYtOQ
    # You can replace this text with custom content, and it will be preserved on regeneration
    1;
  • replacement in src/lib/Hydra/Schema/JobsetInputAlts.pm at line 34
    [5.1831][4.1827:1969]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:fBv361MRwuWvAJQnOLZDIw
    [5.1831]
    [5.1973]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:V8h/34X4hs4PKhxKsFgy9w
  • replacement in src/lib/Hydra/Schema/JobsetInputs.pm at line 46
    [5.1681][4.2016:2158]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:S8AQqv8/GkLkXpPutV4N0A
    [5.1681]
    [5.1823]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:1XdnQh4HnXU/iOyNvv8QWg
  • edit in src/lib/Hydra/Schema/Jobsets.pm at line 46
    [5.2846]
    [5.2594]
    {
    "foreign.jobset" => "self.name",
    "foreign.project" => "self.project",
    },
    );
    __PACKAGE__->has_many(
    "jobs",
    "Hydra::Schema::Jobs",
  • replacement in src/lib/Hydra/Schema/Jobsets.pm at line 61
    [5.2992][4.2230:2372]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:xYDUCEXRPeVdFJBQnG/Wog
    [5.2992]
    [5.3134]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:oZ81xw7qIjVkQKjRdOFW9A
  • edit in src/lib/Hydra/Schema/Projects.pm at line 37
    [5.4761]
    [5.4761]
    "jobs",
    "Hydra::Schema::Jobs",
    { "foreign.project" => "self.name" },
    );
    __PACKAGE__->has_many(
  • replacement in src/lib/Hydra/Schema/Projects.pm at line 53
    [5.3685][4.2373:2515]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:9ZqA/21u40pt4t85YrYbeg
    [5.3685]
    [5.3827]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:z+RXYaHk0RXJfFirBe175A
  • replacement in src/lib/Hydra/Schema/ReleaseSetJobs.pm at line 37
    [5.6070][4.2516:2658]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Ta71pOzVsej/w0FoHIUMbg
    [5.6070]
    [5.6212]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:iWBkyucz/pXtzI+s0iP0EA
  • replacement in src/lib/Hydra/Schema/ReleaseSets.pm at line 32
    [5.7142][4.2659:2801]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:0DtIgm5jznjy1l3809b06Q
    [5.7142]
    [5.7284]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:eeWkr8kYyCvFVDZ3YzpI1Q
  • replacement in src/lib/Hydra/Schema/SystemTypes.pm at line 19
    [5.2105][4.2802:2944]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:WUSl5Uivcl6E1KLxiq+89A
    [5.2105]
    [5.2247]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:z83sYSKRnt5mc2etYvH6Zg
  • replacement in src/lib/Hydra/Schema/UserRoles.pm at line 20
    [5.3736][4.2945:3087]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:x/HXSH7s3bgPJSLK71hV9w
    [5.3736]
    [5.3878]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:WRiW+nBfh/X+TMqYu0PI6g
  • replacement in src/lib/Hydra/Schema/Users.pm at line 33
    [5.3782][4.3088:3230]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:uP86PxN/ZWgy5PRVU7Qgow
    [5.3782]
    [5.3924]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Gw6X/Et2+whq/S7o63zF8Q
  • replacement in src/lib/Hydra/Schema.pm at line 11
    [5.6498][4.3231:3373]()
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:oIv4qqdjLKRDgAYXHHTz8A
    [5.6498]
    [5.6640]
    # Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:aJVSTLLx1pgutjETaqTWXA
  • replacement in src/root/build.tt at line 192
    [5.1583][5.3637:3817]()
    <a href="[% c.uri_for('/build' input.dependency.id) %]">Job <tt>[% input.dependency.project.name %]:[% input.dependency.job %]</tt> build [% input.dependency.id %]</a>
    [5.1583]
    [5.2786]
    Job [% PROCESS renderFullJobNameOfBuild build=input.dependency %] <a href="[% c.uri_for('/build' input.dependency.id) %]">build [% input.dependency.id %]</a>
  • replacement in src/root/build.tt at line 303
    [5.417][5.3818:3983]()
    <td><a href="[% c.uri_for('/build' input.build.id) %]">Job <tt>[% input.build.project.name %]:[% input.build.job %]</tt> build [% input.build.id %]</a></td>
    [5.417]
    [5.590]
    <td>Job [% PROCESS renderFullJobNameOfBuild build=input.build %] <a href="[% c.uri_for('/build' input.build.id) %]">build [% input.build.id %]</a></td>
  • edit in src/root/common.tt at line 40
    [4.4493]
    [5.709]
    [% BLOCK renderFullJobNameOfBuild %]
    <tt>
    [% PROCESS renderFullJobName project=build.get_column("project") jobset = build.get_column("jobset") job = build.get_column("job") %]
    </a>
    [% END %]
  • replacement in src/root/common.tt at line 89
    [4.4540][4.4540:4672]()
    [% PROCESS renderFullJobName project=build.get_column("project") jobset = build.get_column("jobset") job = build.job %]
    [4.4540]
    [4.4672]
    [% PROCESS renderFullJobNameOfBuild %]
  • replacement in src/script/hydra_scheduler.pl at line 219
    [5.9403][5.9403:9525](),[5.9525][5.5471:5535](),[5.5535][5.9594:9604](),[5.9594][5.9594:9604]()
    if (scalar($db->resultset('Builds')->search(
    { project => $project->name, jobset => $jobset->name
    , job => $jobName, outPath => $outPath })) > 0)
    {
    [5.9403]
    [5.2879]
    # Mark this job as active in the database.
    my $jobInDB = $jobset->jobs->update_or_create(
    { name => $jobName
    , active => 1
    , lastevaltime => time
    });
    $jobInDB->update({firstevaltime => time})
    unless defined $jobInDB->firstevaltime;
    # Have we already done this build (in this job)?
    if (scalar($jobInDB->builds->search({outPath => $outPath})) > 0) {
  • edit in src/script/hydra_scheduler.pl at line 235
    [5.9677]
    [5.2926]
    # Nope, so add it.
  • replacement in src/script/hydra_scheduler.pl at line 238
    [5.9959][5.12225:12279]()
    my $build = $db->resultset('Builds')->create(
    [5.9959]
    [5.12279]
    my $build = $jobInDB->builds->create(
  • edit in src/script/hydra_scheduler.pl at line 241
    [5.12341][5.10163:10241](),[5.10163][5.10163:10241](),[5.10241][5.5536:5566]()
    , project => $project->name
    , jobset => $jobset->name
    , job => $jobName
  • replacement in src/script/hydra_scheduler.pl at line 251
    [5.10442][5.5565:5620](),[5.5620][5.12397:12428](),[5.12397][5.12397:12428](),[5.12428][5.226:262]()
    $db->resultset('BuildSchedulingInfo')->create(
    { id => $build->id
    , priority => $priority
    [5.10442]
    [5.12456]
    $build->buildschedulinginfoes->create(
    { priority => $priority
  • replacement in src/script/hydra_scheduler.pl at line 259
    [5.1302][5.5621:5672](),[5.10545][5.5621:5672](),[5.5672][5.12576:12614](),[5.12576][5.12576:12614](),[5.12614][5.1303:1342]()
    $db->resultset('BuildInputs')->create(
    { build => $build->id
    , name => $arg->{name}
    [5.1302]
    [5.10662]
    $build->buildinputs_builds->create(
    { name => $arg->{name}
  • edit in src/script/hydra_scheduler.pl at line 344
    [5.2906]
    [5.2906]
    next if $job->{jobName} eq "";
  • edit in src/script/hydra_scheduler.pl at line 348
    [5.7086]
    [3.688]
    # Mark all existing jobs that we haven't seen as inactive.
    my %jobNames;
    $jobNames{$_->{jobName}}++ foreach @{$jobs->{job}};
    my %failedJobNames;
    push @{$failedJobNames{$_->{location}}}, $_->{msg} foreach @{$jobs->{error}};
    $db->txn_do(sub {
    foreach my $jobInDB ($jobset->jobs->all) {
    print $jobInDB->name, "\n";
    $jobInDB->update({active => $jobNames{$jobInDB->name} || $failedJobNames{$jobInDB->name} ? 1 : 0});
  • edit in src/script/hydra_scheduler.pl at line 361
    [3.689]
    [3.689]
    if ($failedJobNames{$jobInDB->name}) {
    $jobInDB->update({errormsg => join '\n', @{$failedJobNames{$jobInDB->name}}});
    } else {
    $jobInDB->update({errormsg => undef});
    }
    }
    });
  • replacement in src/sql/hydra.sql at line 30
    [5.9254][5.9254:9345]()
    foreign key (project, jobset) references Jobsets(project, name) -- ignored by sqlite
    [5.9254]
    [5.9345]
    foreign key (project, jobset) references Jobsets(project, name), -- ignored by sqlite
    foreign key (project, jobset, job) references Jobs(project, jobset, name) -- ignored by sqlite
  • edit in src/sql/hydra.sql at line 254
    [5.11357]
    [5.4322]
    );
    create table Jobs (
    project text not null,
    jobset text not null,
    name text not null,
    -- `active' means the Nix expression for the jobset currently
    -- contains this job. Otherwise it's a job that has been removed
    -- from the expression.
    active integer not null default 1,
    errorMsg text, -- evalution error for this job
    firstEvalTime integer, -- first time the scheduler saw this job
    lastEvalTime integer, -- last time the scheduler saw this job
    primary key (project, jobset, name),
    foreign key (project) references Projects(name) on delete cascade, -- ignored by sqlite
    foreign key (project, jobset) references Jobsets(project, name) on delete cascade -- ignored by sqlite