Red.git | docs/coverage/report-data/ | Red-ResultAssociative.html


<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>RaCoCo result: Red::ResultAssociative</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::ResultAssociative 68%</h1>
			</div>
		</div>
	</div>
	<div class="row justify-content-md-center">
		<div class="col-md-10">
			<pre class="code">
<span class="coverage-green">use Red::AST;</span>
<span class="coverage-no">use Red::Model;</span>
<span class="coverage-no">use Red::AST::Infixes;</span>
<span class="coverage-no">use Red::AST::Value;</span>
<span class="coverage-no">use Red::AST::Function;</span>
<span class="coverage-no"></span>
<span class="coverage-no">=head2 Red::ResultAssociative</span>
<span class="coverage-no"></span>
<span class="coverage-no">#| Lazy Associative class from Red queries (.classify)</span>
<span class="coverage-green">unit role Red::ResultAssociative[$of, Red::AST $key-of] does Associative;</span>
<span class="coverage-no"></span>
<span class="coverage-green">has Red::AST    $!key-of = $key-of;</span>
<span class="coverage-red">has             $.rs is required;</span>
<span class="coverage-no"></span>
<span class="coverage-no">#| type of the value</span>
<span class="coverage-red">method of     { $of }</span>
<span class="coverage-no"></span>
<span class="coverage-no">#| type of the key</span>
<span class="coverage-red">method key-of { $!key-of.returns }</span>
<span class="coverage-no"></span>
<span class="coverage-no">#| return a list of keys</span>
<span class="coverage-no">#| run a SQL query to get it</span>
<span class="coverage-green">method keys {</span>
<span class="coverage-green">    $!rs.map({ Red::AST::Function.new(:func&lt;DISTINCT&gt;, :args[$key-of], :returns(Str)) })</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-no">#| Run query to get the number of elements</span>
<span class="coverage-green">method elems {</span>
<span class="coverage-green">    $!rs.map({</span>
<span class="coverage-green">        Red::AST::Function.new(:func&lt;COUNT&gt; :args[</span>
<span class="coverage-red">            Red::AST::Function.new(:func&lt;DISTINCT&gt;, :args[$key-of], :returns(Int))</span>
<span class="coverage-no">        ])</span>
<span class="coverage-no">    }).head</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-no">#| return a ResultSeq for the given key</span>
<span class="coverage-green">method AT-KEY($key) {</span>
<span class="coverage-green">    $!rs.grep: { Red::AST::Eq.new: $!key-of, ast-value($key), :bind-right }</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-red">method iterator {</span>
<span class="coverage-red">    gather for $.keys.Seq.grep: { .DEFINITE } { take $_ =&gt; self.AT-KEY: $_ }.iterator</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-red">method gist {</span>
<span class="coverage-red">    &quot;\{{self.map({ &quot;{.key} =&gt; {.value.gist}&quot; }).join: &quot;, &quot;}\}&quot;</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-no">#| Run query to create a Bag</span>
<span class="coverage-green">method Bag {</span>
<span class="coverage-green">    my $rs = $!rs.map({ ($key-of, Red::AST::Function.new(:func&lt;COUNT&gt;, :args[ast-value(&quot;*&quot;),], :returns(Int))) });</span>
<span class="coverage-green">    $rs.group = $!key-of;</span>
<span class="coverage-green">    $rs.Seq.map({ .[0] =&gt; .[1] }).Bag</span>
<span class="coverage-no">}</span>
<span class="coverage-no"></span>
<span class="coverage-no">#| Run query to create a Set</span>
<span class="coverage-green">method Set {</span>
<span class="coverage-green">    my $rs = $!rs.map({ Red::AST::Function.new(:func&lt;DISTINCT&gt;, :args[$key-of], :returns(Str)) });</span>
<span class="coverage-green">    $rs.Seq.Set</span>
<span class="coverage-no">}</span>
			</pre>
		</div>
	</div>
</div>
</body>
</html>