> ## Documentation Index
> Fetch the complete documentation index at: https://villagesql.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Extensão vsql_complex para MySQL

> A extensão vsql_complex adiciona ao MySQL um tipo de coluna COMPLEX com funções de aritmética, módulo e conjugado, e vem como um exemplo completo de um tipo personalizado VEF.

O `vsql_complex` adiciona um tipo de coluna `COMPLEX` que armazena um número
complexo como dois doubles, com a aritmética que o acompanha. Ele vem dentro
do servidor como um exemplo completo de um tipo personalizado, e mostra o que
um tipo VEF precisa de ponta a ponta: um layout binário, uma forma textual,
uma regra de comparação e um agregado.

| | |
| - | - |
| **Mantenedor** | VillageSQL |
| **Código-fonte** | [villagesql-server/villagesql/examples/vsql-complex](https://github.com/villagesql/villagesql-server/tree/main/villagesql/examples/vsql-complex) |
| **Licença** | GPL-2.0 |

## Instalar

O `vsql_complex` fica na árvore de código-fonte do servidor, então o seu bundle
está presente após qualquer método de instalação, incluindo uma compilação a
partir do código-fonte. Instale-o no servidor com uma única instrução:

```sql theme={null}
INSTALL EXTENSION vsql_complex;
```

Confirme que ele está lá:

```sql theme={null}
SELECT EXTENSION_NAME
FROM INFORMATION_SCHEMA.EXTENSIONS
WHERE EXTENSION_NAME = 'vsql_complex';
```

```
+----------------+
| EXTENSION_NAME |
+----------------+
| vsql_complex   |
+----------------+
```

## O que ela adiciona

### O tipo COMPLEX

Um valor é escrito como `'(real,imaginary)'` e ocupa 16 bytes. O bundle também
registra uma variante `COMPLEX2`, que esta página não cobre.

```sql theme={null}
CREATE TABLE signals (
    id        INT PRIMARY KEY,
    impedance COMPLEX
);
```

### Funções

| Função | Retorna | O que faz |
| - | - | - |
| `complex_add(a, b)` | `COMPLEX` | Adição |
| `complex_subtract(a, b)` | `COMPLEX` | Subtração |
| `complex_multiply(a, b)` | `COMPLEX` | Multiplicação |
| `complex_divide(a, b)` | `COMPLEX` | Divisão |
| `complex_real(a)` | real | A parte real |
| `complex_imag(a)` | real | A parte imaginária |
| `complex_abs(a)` | real | O módulo |
| `complex_conjugate(a)` | `COMPLEX` | O conjugado |
| `complex_sum(a)` | `COMPLEX` | Agregado: a soma em um grupo |

## Exemplo

```sql theme={null}
INSERT INTO signals VALUES
    (1, '(50.0,0.0)'),
    (2, '(3.0,4.0)'),
    (3, '(0.0,-2.5)');

SELECT id, impedance,
       complex_real(impedance) AS re,
       complex_imag(impedance) AS im,
       complex_abs(impedance) AS magnitude
FROM signals;
```

```
+----+-----------+------+------+-----------+
| id | impedance | re   | im   | magnitude |
+----+-----------+------+------+-----------+
|  1 | (50,0)    |   50 |    0 |        50 |
|  2 | (3,4)     |    3 |    4 |         5 |
|  3 | (0,-2.5)  |    0 | -2.5 |       2.5 |
+----+-----------+------+------+-----------+
```

Multiplicar por `(0,1)` gira um valor um quarto de volta, e o agregado soma
uma coluna inteira:

```sql theme={null}
SELECT complex_multiply(impedance, '(0,1)') AS rotated FROM signals WHERE id = 2;
SELECT complex_sum(impedance) AS total FROM signals;
```

```
+---------+
| rotated |
+---------+
| (-4,3)  |
+---------+
+----------+
| total    |
+----------+
| (53,1.5) |
+----------+
```

## Veja também

* [Tipos personalizados](https://villagesql.com/docs/pt-BR/sdk/cpp/custom-types.md) — como um tipo VEF é declarado e o que o servidor exige dele
* [Crie uma extensão](https://villagesql.com/docs/pt-BR/extensions/build/create.md) — construindo uma por conta própria
* [Extensões disponíveis](https://villagesql.com/docs/pt-BR/extensions/catalog) — o catálogo completo


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.