Red.git | docs/coverage/report-data/ | Red-Cli.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>RaCoCo result: Red::Cli</title>
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
crossorigin="anonymous">
<style>
pre.code::before {
counter-reset: listing;
}
pre.code span {
counter-increment: listing;
}
pre.code span::before {
content: counter(listing) ". ";
}
.coverage-green {
background-color: #32CD32;
/*color-blind
background-color: #00CED1;
/**/
}
.coverage-red {
background-color: #fa8072;
}
.coverage-purple {
background-color: #9370DB;
}
</style>
</head>
<body>
<div class="container">
<div class="row mt-5 mb-3">
<div class="col-12">
<div class="page-header">
<h1>Red::Cli 0%</h1>
</div>
</div>
</div>
<div class="row justify-content-md-center">
<div class="col-md-10">
<pre class="code">
<span class="coverage-red">unit class Red::Cli;</span>
<span class="coverage-no">use Red::Database;</span>
<span class="coverage-no">use Red::Do;</span>
<span class="coverage-no">use Red::Schema;</span>
<span class="coverage-no">use Red::Utils;</span>
<span class="coverage-no">use Red::AST::CreateColumn;</span>
<span class="coverage-no">use Red::AST::ChangeColumn;</span>
<span class="coverage-red">use Red::AST::DropColumn;</span>
<span class="coverage-no"></span>
<span class="coverage-no"></span>
<span class="coverage-no">#| Lists tables from database schema</span>
<span class="coverage-red">multi list-tables(</span>
<span class="coverage-no"> Str :$driver!,</span>
<span class="coverage-no"> *%pars</span>
<span class="coverage-no">) is export {</span>
<span class="coverage-red"> my $schema-reader = $*RED-DB.schema-reader;</span>
<span class="coverage-no"></span>
<span class="coverage-red"> $schema-reader.tables-names.do-it</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-red">sub gen-stub(:@includes, :@models, :$driver, :%pars) {</span>
<span class="coverage-no"> my @stub;</span>
<span class="coverage-red"> @stub.push: 'use Red:api<2>;';</span>
<span class="coverage-red"> for @includes.unique {</span>
<span class="coverage-red"> @stub.push: "use $_;"</span>
<span class="coverage-no"> }</span>
<span class="coverage-red"> @stub.push: "\nred-defaults \"{ $driver }\", { %pars.map(*.perl) };";</span>
<span class="coverage-red"> @stub.push: "";</span>
<span class="coverage-red"> for @models {</span>
<span class="coverage-red"> @stub.push: ".say for { $_ }.^all;"</span>
<span class="coverage-no"> }</span>
<span class="coverage-red"> @stub</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-no">#| Generates stub code to access models from database schema</span>
<span class="coverage-red">multi gen-stub-code(</span>
<span class="coverage-no"> Str :$schema-class,</span>
<span class="coverage-no"> Str :$driver!,</span>
<span class="coverage-no"> *%pars</span>
<span class="coverage-no">) is export {</span>
<span class="coverage-red"> my $schema-reader = $*RED-DB.schema-reader;</span>
<span class="coverage-no"></span>
<span class="coverage-no"> my @includes;</span>
<span class="coverage-no"> my @models;</span>
<span class="coverage-red"> for $schema-reader.tables-names -> $table-name {</span>
<span class="coverage-red"> my $model-name = snake-to-camel-case $table-name;</span>
<span class="coverage-red"> @models.push: $model-name;</span>
<span class="coverage-red"> with $schema-class {</span>
<span class="coverage-red"> @includes.push: $schema-class;</span>
<span class="coverage-no"> } else {</span>
<span class="coverage-red"> @includes.push: $model-name;</span>
<span class="coverage-no"> }</span>
<span class="coverage-no"> }</span>
<span class="coverage-no"></span>
<span class="coverage-red"> gen-stub(:@includes, :@models, :$driver, :%pars).join: "\n"</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-no"></span>
<span class="coverage-no">#| Generates migration plan to upgrade database schema</span>
<span class="coverage-red">multi migration-plan(</span>
<span class="coverage-no"> Str :$model!,</span>
<span class="coverage-red"> Str :$require = $model,</span>
<span class="coverage-no"> Str :$driver!,</span>
<span class="coverage-no"> *%pars</span>
<span class="coverage-no">) is export {</span>
<span class="coverage-no"> my %steps;</span>
<span class="coverage-red"> require ::($require);</span>
<span class="coverage-red"> for $*RED-DB.diff-to-ast: ::($model).^diff-from-db -> @data {</span>
<span class="coverage-red"> say "Step ", ++$, ":";</span>
<span class="coverage-no"> #say @data.join("\n").indent: 4</span>
<span class="coverage-no"> # $*RED-DB.translate($_).key.indent(4).say for Red::AST::ChangeColumn.optimize: @data</span>
<span class="coverage-red"> $*RED-DB.translate($_).key.indent(4).say for @data</span>
<span class="coverage-no"> }</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-no">#| Generates models' code from database schema</span>
<span class="coverage-red">multi generate-code(</span>
<span class="coverage-red"> Str :$path! where { not .defined or .IO.d or $_ eq "-" or fail "Path $_ does not exist." },</span>
<span class="coverage-red"> Str :$from-sql where { not .defined or .IO.f or $_ eq "-" or fail "SQL $_ do not exist." },</span>
<span class="coverage-no"> Str :$schema-class,</span>
<span class="coverage-no"> Bool :$print-stub = False,</span>
<span class="coverage-no"> Bool :$no-relationships = False,</span>
<span class="coverage-no"> #Bool :$stub-only,</span>
<span class="coverage-no"> Str :$driver!,</span>
<span class="coverage-no"> *%pars</span>
<span class="coverage-no">) is export {</span>
<span class="coverage-red"> my $schema-reader = $*RED-DB.schema-reader;</span>
<span class="coverage-no"></span>
<span class="coverage-red"> my $schema = do if $path eq "-" {</span>
<span class="coverage-red"> $*OUT</span>
<span class="coverage-no"> } else {</span>
<span class="coverage-red"> $path.IO.add("$_.pm6").open: :!bin, :w with $schema-class</span>
<span class="coverage-no"> }</span>
<span class="coverage-no"></span>
<span class="coverage-red"> my $sql = $from-sql eq "-" ?? $*IN !! .IO.open with $from-sql;</span>
<span class="coverage-no"></span>
<span class="coverage-red"> my Bool $no-use = False;</span>
<span class="coverage-no"> my @includes;</span>
<span class="coverage-no"> my @models;</span>
<span class="coverage-red"> for |(</span>
<span class="coverage-no"> $sql</span>
<span class="coverage-no"> ?? $sql.slurp</span>
<span class="coverage-no"> !! $schema-reader.tables-names</span>
<span class="coverage-red"> ) -> $name-or-sql {</span>
<span class="coverage-red"> for |(</span>
<span class="coverage-no"> $name-or-sql.contains(" ")</span>
<span class="coverage-no"> ?? $schema-reader.table-definition-from-create-table($name-or-sql)</span>
<span class="coverage-no"> !! $schema-reader.table-definition($name-or-sql)</span>
<span class="coverage-red"> ) -> $table-definition {</span>
<span class="coverage-red"> my $table-name = $table-definition.name;</span>
<span class="coverage-red"> my $model-name = $table-definition.model-name;</span>
<span class="coverage-red"> @models.push: $model-name;</span>
<span class="coverage-red"> my $fh = do with $schema {</span>
<span class="coverage-red"> @includes.push: $schema-class if $schema-class;</span>
<span class="coverage-red"> $_</span>
<span class="coverage-red"> } else {</span>
<span class="coverage-red"> @includes.push: $model-name;</span>
<span class="coverage-red"> $path.IO.add("{ $model-name }.pm6").open: :!bin, :w</span>
<span class="coverage-no"> }</span>
<span class="coverage-red"> $fh.say: "use Red;\n" unless $no-use;</span>
<span class="coverage-red"> $fh.say: "#| Table: $table-name";</span>
<span class="coverage-red"> $fh.say: $table-definition.to-code:</span>
<span class="coverage-no"> :$no-relationships,</span>
<span class="coverage-red"> |(:$schema-class with $schema-class)</span>
<span class="coverage-no"> ;</span>
<span class="coverage-red"> with $schema {</span>
<span class="coverage-red"> $no-use++ if $schema-class</span>
<span class="coverage-no"> } else {</span>
<span class="coverage-red"> $fh.close unless $path eq "-";</span>
<span class="coverage-no"> }</span>
<span class="coverage-no"> }</span>
<span class="coverage-no"> }</span>
<span class="coverage-red"> $schema.close if $schema.defined and $path ne "-";</span>
<span class="coverage-red"> gen-stub :@includes, :@models, :$driver, :%pars if $print-stub</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-no">#| Prepare database</span>
<span class="coverage-red">multi prepare-database(</span>
<span class="coverage-no"> Bool :$populate,</span>
<span class="coverage-no"> Str :$models!,</span>
<span class="coverage-no"> Str :$driver!,</span>
<span class="coverage-no"> *%pars</span>
<span class="coverage-no">) is export {</span>
<span class="coverage-red"> my @m = schema($models.split: ",").create.models.values;</span>
<span class="coverage-red"> @m.map: { .^populate } if $populate</span>
<span class="coverage-no">}</span>
</pre>
</div>
</div>
</div>
</body>
</html>