/usr/share/doc/libghc-postgresql-simple-doc/html/src/Database-PostgreSQL-Simple-TypeInfo.html is in libghc-postgresql-simple-doc 0.4.0.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>src/Database/PostgreSQL/Simple/TypeInfo.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE RecordWildCards #-}</span>
<a name="line-2"></a>
<a name="line-3"></a><span class='hs-comment'>------------------------------------------------------------------------------</span>
<a name="line-4"></a><span class='hs-comment'>-- |</span>
<a name="line-5"></a><span class='hs-comment'>-- Module: Database.PostgreSQL.Simple.TypeInfo</span>
<a name="line-6"></a><span class='hs-comment'>-- Copyright: (c) 2013 Leon P Smith</span>
<a name="line-7"></a><span class='hs-comment'>-- License: BSD3</span>
<a name="line-8"></a><span class='hs-comment'>-- Maintainer: Leon P Smith <leon@melding-monads.com></span>
<a name="line-9"></a><span class='hs-comment'>-- Stability: experimental</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- This module provides convenient and efficient access to parts of the</span>
<a name="line-12"></a><span class='hs-comment'>-- @pg_type@ metatable. At the moment, this requires PostgreSQL 8.4 if</span>
<a name="line-13"></a><span class='hs-comment'>-- you need to work with types that do not appear in</span>
<a name="line-14"></a><span class='hs-comment'>-- 'Database.PostgreSQL.Simple.TypeInfo.Static'.</span>
<a name="line-15"></a><span class='hs-comment'>--</span>
<a name="line-16"></a><span class='hs-comment'>-- The current scheme could be more efficient, especially for some use</span>
<a name="line-17"></a><span class='hs-comment'>-- cases. In particular, connection pools that use many user-added</span>
<a name="line-18"></a><span class='hs-comment'>-- types and connect to a set of servers with identical (or at least</span>
<a name="line-19"></a><span class='hs-comment'>-- compatible) @pg_type@ and associated tables could share a common</span>
<a name="line-20"></a><span class='hs-comment'>-- typeinfo cache, thus saving memory and communication between the</span>
<a name="line-21"></a><span class='hs-comment'>-- client and server.</span>
<a name="line-22"></a><span class='hs-comment'>--</span>
<a name="line-23"></a><span class='hs-comment'>------------------------------------------------------------------------------</span>
<a name="line-24"></a>
<a name="line-25"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>PostgreSQL</span><span class='hs-varop'>.</span><span class='hs-conid'>Simple</span><span class='hs-varop'>.</span><span class='hs-conid'>TypeInfo</span>
<a name="line-26"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>getTypeInfo</span>
<a name="line-27"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>TypeInfo</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-28"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Attribute</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-29"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-30"></a>
<a name="line-31"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>B</span>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>IntMap</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>IntMap</span>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Vector</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>V</span>
<a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Vector</span><span class='hs-varop'>.</span><span class='hs-conid'>Mutable</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>MV</span>
<a name="line-35"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>MVar</span>
<a name="line-36"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-layout'>(</span><span class='hs-varid'>throw</span><span class='hs-layout'>)</span>
<a name="line-37"></a>
<a name="line-38"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>PostgreSQL</span><span class='hs-varop'>.</span><span class='hs-conid'>LibPQ</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>PQ</span>
<a name="line-39"></a><span class='hs-keyword'>import</span> <span class='hs-comment'>{-# SOURCE #-}</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>PostgreSQL</span><span class='hs-varop'>.</span><span class='hs-conid'>Simple</span>
<a name="line-40"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>PostgreSQL</span><span class='hs-varop'>.</span><span class='hs-conid'>Simple</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-41"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>PostgreSQL</span><span class='hs-varop'>.</span><span class='hs-conid'>Simple</span><span class='hs-varop'>.</span><span class='hs-conid'>Types</span>
<a name="line-42"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>PostgreSQL</span><span class='hs-varop'>.</span><span class='hs-conid'>Simple</span><span class='hs-varop'>.</span><span class='hs-conid'>TypeInfo</span><span class='hs-varop'>.</span><span class='hs-conid'>Types</span>
<a name="line-43"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>PostgreSQL</span><span class='hs-varop'>.</span><span class='hs-conid'>Simple</span><span class='hs-varop'>.</span><span class='hs-conid'>TypeInfo</span><span class='hs-varop'>.</span><span class='hs-conid'>Static</span>
<a name="line-44"></a>
<a name="line-45"></a><span class='hs-comment'>-- | Returns the metadata of the type with a particular oid. To find</span>
<a name="line-46"></a><span class='hs-comment'>-- this data, 'getTypeInfo' first consults postgresql-simple's</span>
<a name="line-47"></a><span class='hs-comment'>-- built-in 'staticTypeInfo' table, then checks the connection's</span>
<a name="line-48"></a><span class='hs-comment'>-- typeinfo cache. Finally, the database's 'pg_type' table will</span>
<a name="line-49"></a><span class='hs-comment'>-- be queried only if necessary, and the result will be stored</span>
<a name="line-50"></a><span class='hs-comment'>-- in the connections's cache.</span>
<a name="line-51"></a>
<a name="line-52"></a><a name="getTypeInfo"></a><span class='hs-definition'>getTypeInfo</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Connection</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>PQ</span><span class='hs-varop'>.</span><span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>TypeInfo</span>
<a name="line-53"></a><span class='hs-definition'>getTypeInfo</span> <span class='hs-varid'>conn</span><span class='hs-keyglyph'>@</span><span class='hs-conid'>Connection</span><span class='hs-layout'>{</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>}</span> <span class='hs-varid'>oid</span> <span class='hs-keyglyph'>=</span>
<a name="line-54"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>staticTypeInfo</span> <span class='hs-varid'>oid</span> <span class='hs-keyword'>of</span>
<a name="line-55"></a> <span class='hs-conid'>Just</span> <span class='hs-varid'>name</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-varid'>name</span>
<a name="line-56"></a> <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>modifyMVar</span> <span class='hs-varid'>connectionObjects</span> <span class='hs-varop'>$</span> <span class='hs-varid'>getTypeInfo'</span> <span class='hs-varid'>conn</span> <span class='hs-varid'>oid</span>
<a name="line-57"></a>
<a name="line-58"></a><a name="getTypeInfo'"></a><span class='hs-definition'>getTypeInfo'</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Connection</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>PQ</span><span class='hs-varop'>.</span><span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TypeInfoCache</span>
<a name="line-59"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>TypeInfoCache</span><span class='hs-layout'>,</span> <span class='hs-conid'>TypeInfo</span><span class='hs-layout'>)</span>
<a name="line-60"></a><span class='hs-definition'>getTypeInfo'</span> <span class='hs-varid'>conn</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>oidmap</span> <span class='hs-keyglyph'>=</span>
<a name="line-61"></a> <span class='hs-keyword'>case</span> <span class='hs-conid'>IntMap</span><span class='hs-varop'>.</span><span class='hs-varid'>lookup</span> <span class='hs-layout'>(</span><span class='hs-varid'>oid2int</span> <span class='hs-varid'>oid</span><span class='hs-layout'>)</span> <span class='hs-varid'>oidmap</span> <span class='hs-keyword'>of</span>
<a name="line-62"></a> <span class='hs-conid'>Just</span> <span class='hs-varid'>typeinfo</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>oidmap</span><span class='hs-layout'>,</span> <span class='hs-varid'>typeinfo</span><span class='hs-layout'>)</span>
<a name="line-63"></a> <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
<a name="line-64"></a> <span class='hs-varid'>names</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>query</span> <span class='hs-varid'>conn</span> <span class='hs-str'>"SELECT oid, typcategory, typdelim, typname,\
<a name="line-65"></a> \ typelem, typrelid\
<a name="line-66"></a> \ FROM pg_type WHERE oid = ?"</span>
<a name="line-67"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Only</span> <span class='hs-varid'>oid</span><span class='hs-layout'>)</span>
<a name="line-68"></a> <span class='hs-layout'>(</span><span class='hs-varid'>oidmap'</span><span class='hs-layout'>,</span> <span class='hs-varid'>typeInfo</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'><-</span>
<a name="line-69"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>names</span> <span class='hs-keyword'>of</span>
<a name="line-70"></a> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throw</span> <span class='hs-layout'>(</span><span class='hs-varid'>fatalError</span> <span class='hs-str'>"invalid type oid"</span><span class='hs-layout'>)</span>
<a name="line-71"></a> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-varid'>typoid</span><span class='hs-layout'>,</span> <span class='hs-varid'>typcategory</span><span class='hs-layout'>,</span> <span class='hs-varid'>typdelim</span><span class='hs-layout'>,</span> <span class='hs-varid'>typname</span><span class='hs-layout'>,</span> <span class='hs-varid'>typelem_</span><span class='hs-layout'>,</span> <span class='hs-varid'>typrelid</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
<a name="line-72"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>typcategory</span> <span class='hs-keyword'>of</span>
<a name="line-73"></a> <span class='hs-chr'>'A'</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
<a name="line-74"></a> <span class='hs-layout'>(</span><span class='hs-varid'>oidmap'</span><span class='hs-layout'>,</span> <span class='hs-varid'>typelem</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>getTypeInfo'</span> <span class='hs-varid'>conn</span> <span class='hs-varid'>typelem_</span> <span class='hs-varid'>oidmap</span>
<a name="line-75"></a> <span class='hs-keyword'>let</span> <span class='hs-varop'>!</span><span class='hs-varid'>typeInfo</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Array</span><span class='hs-layout'>{</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>}</span>
<a name="line-76"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$!</span> <span class='hs-layout'>(</span><span class='hs-varid'>oidmap'</span><span class='hs-layout'>,</span> <span class='hs-varid'>typeInfo</span><span class='hs-layout'>)</span>
<a name="line-77"></a> <span class='hs-chr'>'R'</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
<a name="line-78"></a> <span class='hs-varid'>rngsubtypeOids</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>query</span> <span class='hs-varid'>conn</span> <span class='hs-str'>"SELECT rngsubtype\
<a name="line-79"></a> \ FROM pg_range\
<a name="line-80"></a> \ WHERE rngtypid = ?"</span>
<a name="line-81"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Only</span> <span class='hs-varid'>oid</span><span class='hs-layout'>)</span>
<a name="line-82"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>rngsubtypeOids</span> <span class='hs-keyword'>of</span>
<a name="line-83"></a> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Only</span> <span class='hs-varid'>rngsubtype_</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
<a name="line-84"></a> <span class='hs-layout'>(</span><span class='hs-varid'>oidmap'</span><span class='hs-layout'>,</span> <span class='hs-varid'>rngsubtype</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'><-</span>
<a name="line-85"></a> <span class='hs-varid'>getTypeInfo'</span> <span class='hs-varid'>conn</span> <span class='hs-varid'>rngsubtype_</span> <span class='hs-varid'>oidmap</span>
<a name="line-86"></a> <span class='hs-keyword'>let</span> <span class='hs-varop'>!</span><span class='hs-varid'>typeInfo</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Range</span><span class='hs-layout'>{</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>}</span>
<a name="line-87"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$!</span> <span class='hs-layout'>(</span><span class='hs-varid'>oidmap'</span><span class='hs-layout'>,</span> <span class='hs-varid'>typeInfo</span><span class='hs-layout'>)</span>
<a name="line-88"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>fail</span> <span class='hs-str'>"range subtype query failed to return exactly one result"</span>
<a name="line-89"></a> <span class='hs-chr'>'C'</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
<a name="line-90"></a> <span class='hs-varid'>cols</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>query</span> <span class='hs-varid'>conn</span> <span class='hs-str'>"SELECT attname, atttypid\
<a name="line-91"></a> \ FROM pg_attribute\
<a name="line-92"></a> \ WHERE attrelid = ?\
<a name="line-93"></a> \ AND attnum > 0\
<a name="line-94"></a> \ AND NOT attisdropped\
<a name="line-95"></a> \ ORDER BY attnum"</span>
<a name="line-96"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Only</span> <span class='hs-varid'>typrelid</span><span class='hs-layout'>)</span>
<a name="line-97"></a> <span class='hs-varid'>vec</span> <span class='hs-keyglyph'><-</span> <span class='hs-conid'>MV</span><span class='hs-varop'>.</span><span class='hs-varid'>new</span> <span class='hs-varop'>$!</span> <span class='hs-varid'>length</span> <span class='hs-varid'>cols</span>
<a name="line-98"></a> <span class='hs-layout'>(</span><span class='hs-varid'>oidmap'</span><span class='hs-layout'>,</span> <span class='hs-varid'>attributes</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>getAttInfos</span> <span class='hs-varid'>conn</span> <span class='hs-varid'>cols</span> <span class='hs-varid'>oidmap</span> <span class='hs-varid'>vec</span> <span class='hs-num'>0</span>
<a name="line-99"></a> <span class='hs-keyword'>let</span> <span class='hs-varop'>!</span><span class='hs-varid'>typeInfo</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Composite</span><span class='hs-layout'>{</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>}</span>
<a name="line-100"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$!</span> <span class='hs-layout'>(</span><span class='hs-varid'>oidmap'</span><span class='hs-layout'>,</span> <span class='hs-varid'>typeInfo</span><span class='hs-layout'>)</span>
<a name="line-101"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
<a name="line-102"></a> <span class='hs-keyword'>let</span> <span class='hs-varop'>!</span><span class='hs-varid'>typeInfo</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Basic</span><span class='hs-layout'>{</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>}</span>
<a name="line-103"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$!</span> <span class='hs-layout'>(</span><span class='hs-varid'>oidmap</span><span class='hs-layout'>,</span> <span class='hs-varid'>typeInfo</span><span class='hs-layout'>)</span>
<a name="line-104"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>fail</span> <span class='hs-str'>"typename query returned more than one result"</span>
<a name="line-105"></a> <span class='hs-comment'>-- oid is a primary key, so the query should</span>
<a name="line-106"></a> <span class='hs-comment'>-- never return more than one result</span>
<a name="line-107"></a> <span class='hs-keyword'>let</span> <span class='hs-varop'>!</span><span class='hs-varid'>oidmap''</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IntMap</span><span class='hs-varop'>.</span><span class='hs-varid'>insert</span> <span class='hs-layout'>(</span><span class='hs-varid'>oid2int</span> <span class='hs-varid'>oid</span><span class='hs-layout'>)</span> <span class='hs-varid'>typeInfo</span> <span class='hs-varid'>oidmap'</span>
<a name="line-108"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$!</span> <span class='hs-layout'>(</span><span class='hs-varid'>oidmap''</span><span class='hs-layout'>,</span> <span class='hs-varid'>typeInfo</span><span class='hs-layout'>)</span>
<a name="line-109"></a>
<a name="line-110"></a><a name="getAttInfos"></a><span class='hs-definition'>getAttInfos</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Connection</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span><span class='hs-layout'>,</span> <span class='hs-conid'>PQ</span><span class='hs-varop'>.</span><span class='hs-conid'>Oid</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TypeInfoCache</span>
<a name="line-111"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>MV</span><span class='hs-varop'>.</span><span class='hs-conid'>IOVector</span> <span class='hs-conid'>Attribute</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Int</span>
<a name="line-112"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>TypeInfoCache</span><span class='hs-layout'>,</span> <span class='hs-conid'>V</span><span class='hs-varop'>.</span><span class='hs-conid'>Vector</span> <span class='hs-conid'>Attribute</span><span class='hs-layout'>)</span>
<a name="line-113"></a><span class='hs-definition'>getAttInfos</span> <span class='hs-varid'>conn</span> <span class='hs-varid'>cols</span> <span class='hs-varid'>oidmap</span> <span class='hs-varid'>vec</span> <span class='hs-varid'>n</span> <span class='hs-keyglyph'>=</span>
<a name="line-114"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>cols</span> <span class='hs-keyword'>of</span>
<a name="line-115"></a> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
<a name="line-116"></a> <span class='hs-varop'>!</span><span class='hs-varid'>attributes</span> <span class='hs-keyglyph'><-</span> <span class='hs-conid'>V</span><span class='hs-varop'>.</span><span class='hs-varid'>unsafeFreeze</span> <span class='hs-varid'>vec</span>
<a name="line-117"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$!</span> <span class='hs-layout'>(</span><span class='hs-varid'>oidmap</span><span class='hs-layout'>,</span> <span class='hs-varid'>attributes</span><span class='hs-layout'>)</span>
<a name="line-118"></a> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>attname</span><span class='hs-layout'>,</span> <span class='hs-varid'>attTypeOid</span><span class='hs-layout'>)</span><span class='hs-conop'>:</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
<a name="line-119"></a> <span class='hs-layout'>(</span><span class='hs-varid'>oidmap'</span><span class='hs-layout'>,</span> <span class='hs-varid'>atttype</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>getTypeInfo'</span> <span class='hs-varid'>conn</span> <span class='hs-varid'>attTypeOid</span> <span class='hs-varid'>oidmap</span>
<a name="line-120"></a> <span class='hs-conid'>MV</span><span class='hs-varop'>.</span><span class='hs-varid'>write</span> <span class='hs-varid'>vec</span> <span class='hs-varid'>n</span> <span class='hs-varop'>$!</span> <span class='hs-conid'>Attribute</span><span class='hs-layout'>{</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>}</span>
<a name="line-121"></a> <span class='hs-varid'>getAttInfos</span> <span class='hs-varid'>conn</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>oidmap'</span> <span class='hs-varid'>vec</span> <span class='hs-layout'>(</span><span class='hs-varid'>n</span><span class='hs-varop'>+</span><span class='hs-num'>1</span><span class='hs-layout'>)</span>
</pre></body>
</html>
|